是否有可能创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; } }