我一直在尝试自定义UISegmentControl,如下所示:
首先,我遍历UISegmentControl中的标签并将每个标签设置为多行,但是当我尝试更改标签文本属性时,它不会更改字体。我尝试在普通UILabel上使用此属性,但它可以工作,但不在uisegment中
[segmentedControl.subviews enumerateObjectsUsingBlock:^(UIView * obj, NSUInteger idx, BOOL *stop) {
[obj.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[UILabel class]]) {
//Multiline
UILabel *_tempLabel = (UILabel *)obj;
[_tempLabel setNumberOfLines:0];
NSMutableAttributedString *attString =
[[NSMutableAttributedString alloc]
initWithString: @"monkey goat"];
[attString addAttribute: NSForegroundColorAttributeName
value: [UIColor redColor]
range: NSMakeRange(0,6)];
[attString addAttribute: NSFontAttributeName
value: [UIFont fontWithName:@"Helvetica" size:15]
range: NSMakeRange(0,6)];
[attString addAttribute: NSFontAttributeName
value: [UIFont fontWithName:@"Didot" size:24]
range: NSMakeRange(7,4)];
_tempLabel.attributedText = attString;
}
}];
}];
结果如下:
更改附加到视图的标签属性:
NSMutableAttributedString *attString =
[[NSMutableAttributedString alloc]
initWithString: @"monkey goat"];
[attString addAttribute: NSForegroundColorAttributeName
value: [UIColor redColor]
range: NSMakeRange(0,6)];
[attString addAttribute: NSFontAttributeName
value: [UIFont fontWithName:@"Helvetica" size:15]
range: NSMakeRange(0,6)];
[attString addAttribute: NSFontAttributeName
value: [UIFont fontWithName:@"Didot" size:24]
range: NSMakeRange(7,4)];
self.label.attributedText = attString;
SO链接更改标签属性:Different font size in the same label?
答案 0 :(得分:1)
UISegmentedControl
不支持您要执行的操作。 API仅支持使用' setTitleTextAttributes:forState:`方法为所有片段标题设置单一字体。
最终,分段控件将重置您在挖掘私有子视图后可能设置的任何属性。打击API并不是一个好主意,也不是一个深入了解视图的无证子视图的好主意。这些解决方案有时可能有效,但大多数注定要在未来的iOS更新可用时中断。
您唯一的选择是创建自己的自定义控件,执行您想要的操作或找到其他人创建的控件。
答案 1 :(得分:1)
如果您想自定义分段控件,请从头开始构建。这不难。事实上,它可能比你尝试做的更容易,当然也更安全。