我设置了一个包含多个UISegmentedControl
的屏幕。使用Auto-Layout / NSLayoutConstraints,我将第一个UISegmentControl
设置为宽度为" 0.9超级视图的宽度"。
然后我将第2和第3 UISegmentedControl
设置为宽度等于第1 UISegmentedControl
。
最后,我得到的UISegmentedControls
宽度不一样。根据段的数量,UISegmentedControl
可能在右端有一个空格。对于空白区域,整个区域等于宽度所需的区域 - 但是如果我将背景设置为透明,则UISegmentedControl
不够宽,因为区段的绘制范围不够宽。
任何建议都将不胜感激。
答案 0 :(得分:0)
在我看来,你遇到了UISegmentedControl的错误。我发现即使没有NSLayoutConstraints也可以重现这一点,尽管可能性要小得多!
在您的情况下,您的比例约束为0.9将导致多个设备上的小数宽度。看起来段的自动计算宽度不喜欢这个,这就是出现间隙的原因。
我设置了一个类似的视图,其中三个分段控件设置为超视图宽度的0.9。
现在您可以看到它们具有相同的帧(白色背景),但中间控件不适合整个宽度。
我能够通过覆盖viewController中的viewDidLayoutSubviews并调整segmentedControl的框架来解决问题,如果宽度是小数的话。
- (void)viewDidLayoutSubviews
{
for (UIView *subview in self.view.subviews) {
if ([subview isKindOfClass:[UISegmentedControl class]]) {
CGRect frame = subview.frame;
CGFloat frameWidth = CGRectGetWidth(frame);
CGFloat roundedWidth = roundf(frameWidth);
if (frameWidth != roundedWidth) {
frame.size.width = roundedWidth;
subview.frame = frame;
}
}
}
}
产生此结果
答案 1 :(得分:0)
事实证明这种情况正在发生,因为之前的应用程序开发人员实现了UISegmentControl
的子类,这影响了每个段的宽度。
我对这个子类进行了一些调整,UISegmentControl
开始正确调整大小,即使使用比例约束也是如此。
使用标准UISegmentControl
类时,我无法重现此问题。