如果UISegmentedControl
中的细分与内容成比例widthForSegmentAtIndex
,则从viewDidLayoutSubviews
调用时似乎返回0。无论如何要获得实际宽度? (我正在使用自动布局。)
如果没有,是否有任何方法可以获得与细分相对应的子视图? segmentedControl.subviews[index]
无效可靠。
如果无法做到这一点,是否可以使用UISegmentedControl替代?
谢谢!
答案 0 :(得分:1)
从我的测试中可以看出,无论每个细分的文字大小如何,细分的宽度总是相等。
CGFloat segmentWidth = segmentedControl.frame.size.width / segmentedControl.numberOfSegments;
修改强>
不幸的是,如果segmentedControl正在使用apportionsSegmentWidthsByContent
,则上述答案不起作用。在这种情况下,我找不到一种简单的方法来获得段的宽度。
但是,您可以手动获取您感兴趣的片段的文本,然后计算它应该有多长(取决于您想要在两侧填充多少),然后使用该数字并使用{ {1}}方法将网段设置为计算出的宽度,然后您就可以确定网段的宽度。
答案 1 :(得分:0)
以下类别使NSSegmentedControl能够告诉您其计算出的段宽度。这并不完美-请在评论中看到免责声明。
@implementation NSSegmentedControl (SegmentedControlWidthComputation)
/* Note: This implementation doesn't properly handle cells with images. It also makes some guesses about AppKit's behavior, and should be treated as an estimation rather than an exact value. */
- (CGFloat)computedWidthForSegment:(NSInteger)SEGIDX
{
CGFloat pad = 0;
switch (self.controlSize) {
case (NSControlSizeMini): pad = 16; break;
case (NSControlSizeSmall): pad = 22; break;
case (NSControlSizeRegular): pad = 28; break;
}
return [[NSAttributedString alloc] initWithString:[self labelForSegment:SEGIDX] attributes:@{NSFontAttributeName:self.font}].size.width + pad;
}
@end