是否有可能创build多行UISegmentedControl?
我在我的分段控制中有一个相对较长的文本项目,所以我需要在某些点断开文本。 是否可以使用换行符? 怎么样? 我知道在button我需要设置换行世界换行,但它不是UISegmentedControl。
如果你有一个标准的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也指出了正确的警告 – 这是一个相当脆弱的解决scheme,因为如果在未来的iOS版本中更改分段控件的视图层次结构,代码可能无法正常工作。
请参考这个答案
斯威夫特3及以上
UILabel.appearance(whenContainedInInstancesOf: [UISegmentedControl.self]).numberOfLines = 0
目标C
[[UILabel appearanceWhenContainedIn:[UISegmentedControl class], nil] setNumberOfLines:0];
添加[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; } }