2010-02-17 4 views

Répondre

13

Une autre option consiste à appliquer une transformation au contrôle. Cependant, il réduira tout, y compris les frontières de contrôle.

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

Merci à ce code de fonctionnement simple. La mise à l'échelle .75f dans iOS6 fournit le meilleur résultat. Si elle est utilisée dans une cellule de tableau, ajoutez 10 à la hauteur de la cellule. – kjoelbro

+0

Ce n'est pas la façon dont vous changez la taille de la police sur un contrôle dans iOS. La transformation Affine est principalement destinée à être utilisée avec des animations. – vahotm

+0

Veuillez ne pas modifier les contrôles standard. –

2

Daniel m'a indiqué de manière correcte. Je l'ai utilisé comme this-

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; 
0

Vous pouvez obtenir à la police réelle pour la UILabel en examinant récursive chacune des vues en commençant par le UISegmentedControl. Je ne sais pas si c'est la meilleure façon de le faire, mais ça fonctionne.

@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 

Dans le code ci-dessus, je suis en train juste la couleur du texte de la UILabel, mais vous pouvez saisir ou définir la propriété de la police et je suppose.

400

J'ai rencontré le même problème. Ce code définit la taille de la police pour l'ensemble du contrôle segmenté. Quelque chose de similaire peut fonctionner pour définir le type de police. Notez que ceci est uniquement disponible pour iOS5 +

Obj C:

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

EDIT: UITextAttributeFont a été dépréciée - utiliser NSFontAttributeName à la place. EDIT # 2: Pour Swift 4 NSFontAttributeName a été changé pour 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) 

Merci à la Swi implémentations ft de @ audrey-Gordeev

+4

Cela fonctionne très bien, mais si j'ai déjà fait '[mySegmentedControl setTintColor: onColor pourTag: kTagOnState];' et un [mySegmentedControl setTintColor: offColor forTag: kTagOffState]; 'puis appliquez le \t' [mySegmentedControl setTitleTextAttributes: attributes forState: UIControlStateNormal]; 'alors les couleurs que je viens de définir disparaissent. – scooter133

+0

Vous devez utiliser à la place dictionaryWithObjects: forKeys et créer deux tableaux avec vos attributs d'objet et de clé. – runmad

+0

Le code a bien fonctionné pour moi tel qu'il est. – shkschneider

50

utiliser l'API Apparence dans iOS 5.0+:

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

Liens: 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

+4

'UITextAttributeFont' a été dépréciée - utiliser' NSFontAttributeName' à la place. –

+1

À noter qu'il va changer la police de tous 'UISegmentedControl's. – Vive

8

Swift Style:

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

Vous devriez utiliser un dictionnaire de style rapide. '[NSFontAttributeName: font]' – osrl

29

Voici une version rapide de l'a accepté nswer:

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) 
0

ceci est pour c objective ajouter le nom de votre contrôle segmenté en place de mysegmentedcontrol

UIFont * font = [UIFont systemFontOfSize: 11.0f];

NSDictionary * attributs = [DictionnaireDSSDictionnaireObjet: police forKey: UITextAttributeFont]; [MySegmentedcontrol setTitleTextAttributes: attributs forState: UIControlStateNormal];

espère que cela aide

7

Ici, je l'ai mis à jour pour iOS8

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

Son travail pour moi. –

4
// 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 vous avez des questions, contactez-moi.

+0

** objFont ** renvoie la valeur «nil». –

0

Extension pour UISegmentedControl pour définir la taille de la police.

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) 
    } 
} 
5

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) 
    } 
} 

changer juste la valeur numérique (ofSize: 24.0)

Preview

+0

Fonctionne parfaitement dans Swift 3 et Xcode 8.2 – deijmaster

0

C#/Xamarin:

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