Cambiar el tamaño de fuente de UISegmentedControl

¿Puede alguien decirme cómo puedo cambiar el tipo de fuente y el tamaño de UISegmentedControl ?

    Me encontré con el mismo problema. Este código establece el tamaño de fuente para todo el control segmentado. Algo similar podría funcionar para configurar el tipo de letra. Tenga en cuenta que esto solo está disponible para iOS5 +

    Obj C :

     UIFont *font = [UIFont boldSystemFontOfSize:12.0f]; NSDictionary *attributes = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName]; [segmentedControl setTitleTextAttributes:attributes forState:UIControlStateNormal]; 

    EDITAR: UITextAttributeFont ha quedado en desuso – use NSFontAttributeName en NSFontAttributeName lugar.

    EDIT # 2: para Swift 4 NSFontAttributeName se ha cambiado a NSAttributedStringKey.font .

    Swift 4 :

     let font = UIFont.systemFont(ofSize: 16) segmentedControl.setTitleTextAttributes([NSAttributedStringKey.font: font], for: .normal) 

    Swift 3 :

     let font = UIFont.systemFont(ofSize: 16) segmentedControl.setTitleTextAttributes([NSFontAttributeName: font], for: .normal) 

    Swift 2.2 :

     let font = UIFont.systemFontOfSize(16) segmentedControl.setTitleTextAttributes([NSFontAttributeName: font], forState: UIControlState.Normal) 

    Gracias a las implementaciones de Swift de @ audrey-gordeev

    Use la API de Apariencia en iOS 5.0+:

     [[UISegmentedControl appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"STHeitiSC-Medium" size:13.0], UITextAttributeFont, nil] forState:UIControlStateNormal]; 

    Enlaces: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIAppearance_Protocol/Reference/Reference.html#//apple_ref/doc/uid/TP40010906

    http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5

    Aquí hay una versión Swift de la respuesta aceptada:

    Swift 3 :

     let font = UIFont.systemFont(ofSize: 16) segmentedControl.setTitleTextAttributes([NSFontAttributeName: font], for: .normal) 

    Swift 2.2 :

     let font = UIFont.systemFontOfSize(16) segmentedControl.setTitleTextAttributes([NSFontAttributeName: font], forState: UIControlState.Normal) 

    Otra opción es aplicar una transformación al control. Sin embargo, reducirá todo, incluidos los bordes de control.

     segmentedControl.transform = CGAffineTransformMakeScale(.6f, .6f); 

    Swift Style:

     UISegmentedControl.appearance().setTitleTextAttributes(NSDictionary(objects: [UIFont.systemFontOfSize(14.0)], forKeys: [NSFontAttributeName]), forState: UIControlState.Normal) 

    Aquí he actualizado para iOS8

     [[UISegmentedControl appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"STHeitiSC-Medium" size:13.0], NSFontAttributeName, nil] forState:UIControlStateNormal]; 

    XCode 8.1, Swift 3

     import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() UISegmentedControl.appearance().setTitleTextAttributes(NSDictionary(objects: [UIFont.systemFont(ofSize: 24.0)], forKeys: [NSFontAttributeName as NSCopying]) as? [AnyHashable : Any], for: UIControlState.normal) } } 

    simplemente cambie el valor (ofSize: 24.0)

    Avance

     // Set font-size and font-femily the way you want UIFont *objFont = [UIFont fontWithName:@"DroidSans" size:18.0f]; // Add font object to Dictionary NSDictionary *dictAttributes = [NSDictionary dictionaryWithObject:objFont forKey:NSFontAttributeName]; // Set dictionary to the titleTextAttributes [yourSegment setTitleTextAttributes:dictAttributes forState:UIControlStateNormal]; 

    Si tiene alguna consulta, contácteme.

    Daniel me indicó el camino correcto. Lo usé así-

     float scaleFactor = 0.8f; UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithFrame:CGRectMake(10, 70, 300/scaleFactor,35)]; [segmentedControl insertSegmentWithTitle:@"..." atIndex:0 animated:NO]; [segmentedControl insertSegmentWithTitle:@"..." atIndex:1 animated:NO]; [segmentedControl insertSegmentWithTitle:@"..." atIndex:2 animated:NO]; segmentedControl.transform = CGAffineTransformMakeScale(scaleFactor, 1); CGPoint segmentedControlCenter = segmentedControl.center; segmentedControlCenter.x = self.center.x; segmentedControl.center = segmentedControlCenter; 

    C # / Xamarin:

     segment.SetTitleTextAttributes(new UITextAttributes { Font = UIFont.SystemFontOfSize(font_size) }, UIControlState.Normal); 

    Puede obtener la fuente real de UILabel examinando recursivamente cada una de las vistas que comienzan con UISegmentedControl. No sé si esta es la mejor manera de hacerlo, pero funciona.

     @interface tmpSegmentedControlTextViewController : UIViewController { } @property (nonatomic, assign) IBOutlet UISegmentedControl * theControl; @end @implementation tmpSegmentedControlTextViewController @synthesize theControl; // UISegmentedControl - (void)viewDidLoad { [self printControl:[self theControl]]; [super viewDidLoad]; } - (void) printControl:(UIView *) view { NSArray * views = [view subviews]; NSInteger idx,idxMax; for (idx = 0, idxMax = views.count; idx < idxMax; idx++) { UIView * thisView = [views objectAtIndex:idx]; UILabel * tmpLabel = (UILabel *) thisView; if ([tmpLabel respondsToSelector:@selector(text)]) { NSLog(@"TEXT for view %d: %@",idx,tmpLabel.text); [tmpLabel setTextColor:[UIColor blackColor]]; } if (thisView.subviews.count) { NSLog(@"View has subviews"); [self printControl:thisView]; } } } @end 

    En el código anterior, solo estoy configurando el color del texto de UILabel, pero supongo que también podría capturar o establecer la propiedad de la fuente.

    Extensión para UISegmentedControl para establecer el Tamaño de fuente.

     extension UISegmentedControl { @available(iOS 8.2, *) func setFontSize(fontSize: CGFloat) { let normalTextAttributes: [NSObject : AnyObject]! if #available(iOS 9.0, *) { normalTextAttributes = [ NSFontAttributeName: UIFont.monospacedDigitSystemFontOfSize(fontSize, weight: UIFontWeightRegular) ] } else { normalTextAttributes = [ NSFontAttributeName: UIFont.systemFontOfSize(fontSize, weight: UIFontWeightRegular) ] } self.setTitleTextAttributes(normalTextAttributes, forState: .Normal) } } 

    esto es para el objective c añada su nombre de control segmentado en lugar de mysegmentedcontrol

     UIFont *font = [UIFont systemFontOfSize:11.0f]; NSDictionary *attributes = [NSDictionary dictionaryWithObject:font forKey:UITextAttributeFont]; [mySegmentedcontrol setTitleTextAttributes:attributes forState:UIControlStateNormal]; 

    Espero eso ayude

      UISegmentedControl.appearance().setTitleTextAttributes(NSDictionary(objects: [UIFont.systemFont(ofSize: 16.0)], forKeys: [kCTFontAttributeName as! NSCopying]) as? [AnyHashable : Any], for: UIControlState.normal)