我的分段控件中有相对较长的文本项,所以我需要在某些点打破文本。是否可以使用换行符?我知道在按钮上我需要设置换行到自动换行,但是如何为UISegmentedControl设置它。
答案 0 :(得分:21)
请参阅this answer
Swift 3 +
UILabel.appearance(whenContainedInInstancesOf: [UISegmentedControl.self]).numberOfLines = 0
目标C
[[UILabel appearanceWhenContainedIn:[UISegmentedControl class], nil] setNumberOfLines:0];
答案 1 :(得分:4)
如果您有标准UISegmentedControl
,则可以使用以下提示:
[_segmentedControl.subviews enumerateObjectsUsingBlock:^(UIView * obj, NSUInteger idx, BOOL *stop) {
[obj.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[UILabel class]]) {
UILabel *_tempLabel = (UILabel *)obj;
[_tempLabel setNumberOfLines:0];
}
}];
}];
您可能还需要设置实例的height
。
注意:我需要添加一些警告 - 正如rmaddy也正确指出的那样 - 这是一个非常脆弱的解决方案,因为如果分段控件的视图层次结构会在未来的iOS版本代码可能无法正常工作。
答案 2 :(得分:1)
添加[yourSegmentedControl layoutIfNeeded];
方法,然后将其添加为子视图。然后迭代所有SegmentedControl子视图并修改标题标签的numberOfLines
属性。
这是代码
for (id segmentItem in [yourSegmentedControl subviews])
{
if ([segmentItem isKindOfClass:[UILabel class]])
{
UILabel *titleLabel = (UILabel *) segmentItem;
titleLabel.frame = CGRectMake(0, 0, 100, 50); //modify the frame if the second line is not showing.
titleLabel.numberOfLines = 0;
}
}
答案 3 :(得分:0)
我改变了这个link的代码,这里是Swift扩展名:
<memory>
答案 4 :(得分:0)
解决方案的Swift 4版本。 segmentedControl 是您的UISegmentedControl
实例。
for segmentItem : UIView in segmentedControl.subviews
{
for item : Any in segmentItem.subviews {
if let i = item as? UILabel {
i.numberOfLines = 0
// change other parameters: color, font, height ...
}
}
}
不要忘记将 segmentedControl的高度设置为字体高度的两倍。