Ios 将自动布局应用于UISegmentedControl

Ios 将自动布局应用于UISegmentedControl,ios,objective-c,autolayout,uisegmentedcontrol,Ios,Objective C,Autolayout,Uisegmentedcontrol,我为UISegmentedControl中的段设置自定义宽度。因此,分段控件不使用自动布局。(在故事板中,我在分段控件的所有4个面上应用了约束) 这是我的密码: CGFloat segmentWidth = self.segment.frame.size.width; [self.segment insertSegmentWithTitle:@"titleName" atIndex:2 animated:NO]; [self.segment setWidth:segmentWidth

我为
UISegmentedControl
中的段设置自定义宽度。因此,
分段控件
不使用
自动布局
。(在故事板中,我在
分段控件的所有4个面上应用了
约束

这是我的密码:

CGFloat segmentWidth = self.segment.frame.size.width;

[self.segment insertSegmentWithTitle:@"titleName" atIndex:2 animated:NO];    
[self.segment setWidth:segmentWidth / 6 forSegmentAtIndex:1];
[self.segment setWidth:segmentWidth / 6 forSegmentAtIndex:2];

[self.segment setWidth:segmentWidth / 3 forSegmentAtIndex:0];
下面是一幅图来说明此代码的作用:


是否有办法将
自动布局
添加到

问题在于您的代码位于错误的位置。把它放到
viewDidLayoutSubviews
中,一切都会好起来。

发布关于自动布局的屏幕截图,问题似乎在于
自动布局
作为一个整体应用于
分段控件
,但不应用于单个
分段
。因此,当包含
分段控件的
视图
加宽时,
的宽度并不相等,最后一个
变宽,而不是所有
加宽。我知道这有点让人困惑。如果您了解自动布局可能无法设置单个线段,请告诉我。这是从以下位置引用的:UISegmentedControl对象会自动调整线段的大小,使其与superview成比例地匹配,除非它们设置了特定的宽度。与
UITableViewCell
textlab
类似,苹果处理一些GUI以确保一致性。如果你想对它有更多的控制,你可以用按钮来定制你的SegmentControl。你想实现什么?然后你可以发布该工具的图像吗?看起来我们以前见过这个问题:仔细看看我的答案。分段大小的设置必须响应自动布局对分段控件宽度的更改;它不能在它前面。我将它放在
按钮
操作中。但是如果自动布局运行并且分段控件的大小改变,代码就不会以这种方式再次运行。您需要它自动运行-每次自动布局执行布局。这就是为什么它需要进入
viewdilayoutsubviews
。您问“有没有办法将自动布局添加到段中?”。我告诉你怎么做。如果您的代码位于
viewdilayoutsubview
中,则分段将根据分段控件所做的任何操作进行调整,并且比例始终正确。我可以从
按钮
操作中查看所有
viewdilayoutsubview
吗?嗯,您可能不应该这样做。但是您可以让按钮和viewDidLayoutSubviews调用某个方法或者只是复制代码(我知道这不是很好的练习)。