【发布时间】:2023-04-10 06:33:02
【问题描述】:
我有一个UISegmentedControl,我正在尝试设置每个segment 的宽度。下面的代码不应该改变任何东西,但确实如此。代码如下:
viewDidApear
NSLog(@"%f", self.segment.frame.size.width); // 369
CGFloat segmentWidth = self.segment.frame.size.width;
NSUInteger firstAndLastSegmentWidth = [self.segment widthForSegmentAtIndex:0] + [self.segment widthForSegmentAtIndex:4];
[self.segment setWidth:(segmentWidth - firstAndLastSegmentWidth) / 3 forSegmentAtIndex:1];
[self.segment setWidth:(segmentWidth - firstAndLastSegmentWidth) / 3 forSegmentAtIndex:2];
[self.segment setWidth:(segmentWidth - firstAndLastSegmentWidth) / 3 forSegmentAtIndex:3];
// Note: The following code does not do anything:
CGRect viewFrame = self.segment.frame;
viewFrame.origin.x = self.thirdCell.frame.origin.x - 30;
self.segment.frame = viewFrame;
NSLog(@"%f", self.segment.frame.size.width); // 369
故事板:
NSLayoutConstraints:
模拟器:
第一张图片是上面代码执行的时候。第二张图是上面代码被删除的时候。
注意一直到图像的右侧,当代码执行时,(第一张图像),宽度似乎发生了变化。但是当我对宽度进行NSLog 时,在我设置段宽度之前和之后,它们显示的结果相同。
我的问题是,当我运行上面的代码时,如何让segmentedControl 不改变其外观?
【问题讨论】:
-
除了丢失的灰色条(不管是什么),这两个模拟器图像看起来和我一模一样。我也不明白你的问题;如果你不想让代码改变外观,那你为什么要运行代码呢?
-
如果您放大近看,您会看到在第二张图片中,
segmentedControl有点小。我必须运行该代码,因为我将添加段,然后更改它们的大小。为了简化事情,我只是发布了最简单的代码,以显示问题所在 -
灰色条是模拟器的影子
-
当您添加或删除段时,seqments 自然是相等的。你不应该调整宽度,除非你故意在最左边和最右边有一个非常薄的“空”段。
标签: ios objective-c uisegmentedcontrol nslayoutconstraint