更改UISegmentedControl的字体大小

Aas*_*ari 217 iphone cocoa-touch font-size uisegmentedcontrol ios

任何人都可以告诉我如何更改字体类型和大小UISegmentedControl

joh*_*ham 482

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

对象C:

UIFont *font = [UIFont boldSystemFontOfSize:12.0f];
NSDictionary *attributes = [NSDictionary dictionaryWithObject:font
                                                       forKey:NSFontAttributeName];
[segmentedControl setTitleTextAttributes:attributes 
                                forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

编辑:UITextAttributeFont已被弃用 - NSFontAttributeName改为使用.

编辑#2:对于Swift 4 NSFontAttributeName已经改为NSAttributedStringKey.font.

斯威夫特4:

let font = UIFont.systemFont(ofSize: 16)
segmentedControl.setTitleTextAttributes([NSAttributedString.Key.font: font], for: .normal)
Run Code Online (Sandbox Code Playgroud)

斯威夫特3:

let font = UIFont.systemFont(ofSize: 16)
segmentedControl.setTitleTextAttributes([NSAttributedStringKey.font: font],
                                        for: .normal)
Run Code Online (Sandbox Code Playgroud)

Swift 2.2:

let font = UIFont.systemFont(ofSize: 16)
segmentedControl.setTitleTextAttributes([NSFontAttributeName: font],
                                        for: .normal)
Run Code Online (Sandbox Code Playgroud)

感谢@ audrey-gordeev的Swift实现

  • 在iOS7中:`NSDictionary*attributes = @ {NSFontAttributeName:[UIFont boldsystemFontOfSize:12.0f]};` (8认同)
  • 这很好用,但是如果我已经完成了`[mySegmentedControl setTintColor:onColor forTag:kTagOnState];`和`[mySegmentedControl setTintColor:offColor forTag:kTagOffState];`然后应用`[mySegmentedControl setTitleTextAttributes:attributes forState:UIControlStateNormal] ;那么我刚刚设定的颜色就消失了. (4认同)
  • 适用于iOS 5.0或更高版本 (3认同)
  • @JasonMoore`boldSystemFontOfSize:`(系统的资本S) (2认同)

Mic*_*son 51

使用iOS 5.0+中的Appearance API:

[[UISegmentedControl appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"STHeitiSC-Medium" size:13.0], UITextAttributeFont, nil] forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

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

  • `UITextAttributeFont`已被折旧 - 改为使用`NSFontAttributeName`. (5认同)
  • 值得注意的是它会改变所有`UISegmentedControl`的字体. (4认同)

And*_*eev 35

这是接受答案的Swift版本:

斯威夫特3:

let font = UIFont.systemFont(ofSize: 16)
segmentedControl.setTitleTextAttributes([NSFontAttributeName: font],
                                        for: .normal)
Run Code Online (Sandbox Code Playgroud)

Swift 2.2:

let font = UIFont.systemFontOfSize(16)
segmentedControl.setTitleTextAttributes([NSFontAttributeName: font], 
    forState: UIControlState.Normal)
Run Code Online (Sandbox Code Playgroud)


小智 13

另一种选择是将变换应用于控件.但是,它会缩小包括控制边框在内的所有内容.

segmentedControl.transform = CGAffineTransformMakeScale(.6f, .6f);
Run Code Online (Sandbox Code Playgroud)


Pet*_*inz 9

斯威夫特风格:

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


kar*_*yan 8

这里我更新了iOS8

[[UISegmentedControl appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"STHeitiSC-Medium" size:13.0], NSFontAttributeName, nil] forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)


小智 8

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

只需更改数值 (ofSize: 24.0)

预习