gpt4 book ai didi

ios - UISegmentedControl 不遵守 NSConstraint 的宽度

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:34:10 27 4
gpt4 key购买 nike

我设置了一个带有多个 UISegmentedControl 的屏幕。使用自动布局/NSLayoutConstraints,我将第一个 UISegmentControl 的宽度设置为“0.9 super View 的宽度”。

然后我将第二个和第三个 UISegmentedControl 的宽度设置为与第一个 UISegmentedControl 相同的宽度。

最后,我得到了宽度不同的 UISegmentedControls。根据段数,UISegmentedControl 可能在右端有一个空白。对于空白区域,整个区域等于所需的宽度 - 但如果我将背景设置为透明,则 UISegmentedControl 不够宽,因为未绘制足够宽的线段。

我已经圈出附图中的白色缺口。 space on right end of 2nd UISegmentedControl

如有任何建议,我们将不胜感激。

最佳答案

在我看来,您遇到了 UISegmentedControl 的错误。我发现即使没有 NSLayoutConstraints 也可以重现这一点,尽管可能性要小得多!

在您的情况下,0.9 的比例约束会导致多个设备上的分数宽度。似乎自动计算的段宽度不喜欢这样,这就是出现间隙的原因。

我设置了一个类似的 View ,将三个段控件设置为 super View 宽度的 0.9。

Three UISegmentControls, with gap showing on right edge

现在您可以看到它们具有相同的框架(白色背景),但中间控件不适合整个宽度。

我能够通过覆盖我的 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;
}
}
}
}

产生这个结果

enter image description here

关于ios - UISegmentedControl 不遵守 NSConstraint 的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34865476/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com