更改UISegmentedControl的字体大小

任何人都可以请告诉我如何更改UISegmentedControl的字体types和大小?

我遇到了同样的问题。 此代码设置整个分段控件的字体大小。 类似的东西可能适用于设置字体types。 请注意,这仅适用于iOS5 +

对象C

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

编辑: UITextAttributeFont已被弃用 – 而是使用NSFontAttributeName

编辑#2:对于Swift 4 NSFontAttributeName已被更改为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) 

感谢@ audrey-gordeev的Swift实现

使用iOS 5.0+中的外观API:

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

链接: 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

这是一个被接受的答案的Swift版本:

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) 

另一种select是对控件应用一个变换。 但是,它会缩小包括控制边界在内的所有内容。

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

Swift风格:

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

在这里我已经更新了iOS8

 [[UISegmentedControl appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"STHeitiSC-Medium" size:13.0], NSFontAttributeName, nil] forState:UIControlStateNormal]; 
 // 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]; 

如果您有任何疑问,请联系我。

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

只需更改数值(ofSize: 24.0)

预习

丹尼尔指出我正确的方式。 我像这样使用它 –

 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; 

您可以通过recursion地检查每个以UISegmentedControl开始的视图来获取UILabel的实际字体。 我不知道这是否是最好的方法,但它是有效的。

 @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 

在上面的代码中,我只是设置UILabel的文本颜色,但你可以抓住或设置字体属性以及我想。

这是为了客观的c添加您的分割控制名称mysegmentedcontrol的地方

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

NSDictionary * attributes = [NSDictionary dictionaryWithObject:font forKey:UITextAttributeFont];

[mySegmentedcontrol setTitleTextAttributes:attributes forState:UIControlStateNormal];

希望它有帮助

 Extension for UISegmentedControl for setting Font Size. 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) } } 

C#/ Xamarin:

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