我有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
不要更改其'当我运行上面的代码时出现?
答案 0 :(得分:0)
设置段的宽度确实会改变分段控件的可见大小,但不会改变控件的实际大小。您可以在代码中除以5而不是3来看到这一点,并且您会看到控件显示小得多,但如果您点击最后一段的右侧,您将会看到它选择它(如果你给控件一个背景颜色,它会扩展到由它的约束定义的控件的完整大小)。至于为什么数学不起作用,我认为这是因为分隔符。如果为每个分隔符减去1(在你的情况下为4),你应该得到正确的大小。
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
CGFloat segmentWidth = self.segment.frame.size.width;
NSUInteger firstAndLastSegmentWidth = [self.segment widthForSegmentAtIndex:0] + [self.segment widthForSegmentAtIndex:4];
NSInteger sepWidths = self.segment.numberOfSegments - 1;
[self.segment setWidth:(segmentWidth - firstAndLastSegmentWidth - sepWidths) / 3 forSegmentAtIndex:1];
[self.segment setWidth:(segmentWidth - firstAndLastSegmentWidth - sepWidths) / 3 forSegmentAtIndex:2];
[self.segment setWidth:(segmentWidth - firstAndLastSegmentWidth - sepWidths) / 3 forSegmentAtIndex:3];
}