【问题标题】:Apply auto-layout to UISegmentedControl将自动布局应用于 UISegmentedControl
【发布时间】:2015-05-13 04:42:38
【问题描述】:

我在UISegmentedControl 中为段设置了自定义宽度。因此,SegmentedControl 不使用auto-layout。 (在故事板中,我在 SegmentedControl 的所有 4 面都应用了 constraint。)

这是我的代码:

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];

这里有一张图片来说明这段代码的作用:

有没有办法将auto-layout 添加到segments

【问题讨论】:

  • 发布你的自动布局截图,看来你的约束是问题
  • Auto-layout 应用于整个SegmentedControl,但不应用于单个segments。因此,当包含SegmentedControlview 变宽时,segments 的宽度不同,最后一个segment 变宽,而不是所有segments 变宽。我知道这有点令人困惑。让我知道你是否理解
  • 您可能无法使用自动布局设置单个段。这是从Apple's doc 引用的:UISegmentedControl 对象会自动调整分段大小以按比例适应其父视图,除非它们设置了特定的宽度。 类似于UITableViewCelltextLabel,Apple 处理一些GUI 的一致性。如果您想对其进行更多控制,您可以随时使用例如按钮制作自定义 SegmentControl。
  • 你想实现什么,那么你也可以发布图片
  • 这个问题我们好像见过:stackoverflow.com/questions/30179886/…仔细看我的回答。您对分段大小的设置必须响应自动布局对分段控件宽度的更改;它不能它之前。

标签: ios objective-c autolayout uisegmentedcontrol


【解决方案1】:

问题是你的代码放错了地方。放入viewDidLayoutSubviews,一切都会好起来的。

【讨论】:

  • 我把它放在了buttons 动作中。所以它会在那之后被调用。
  • 但是如果自动布局运行并且分段控件的大小发生变化,您的代码将不会以这种方式再次运行。您需要它自动运行 - 每次自动布局执行布局时。这就是为什么它需要进入viewDidLayoutSubviews
  • 您问“有没有办法为段添加自动布局”。我告诉你怎么做。如果您的代码在viewDidLayoutSubviews 中,那么分段将根据分段控件的功能进行调整,并且比例始终正确。
  • 我可以通过buttons 操作全部viewDIdLayoutSubviews 吗?
  • 嗯嗯嗯,你可能不应该这样做。但是您可以同时让按钮和viewDidLayoutSubviews 调用某个方法。 - 或者只是复制代码(我知道这不是很好的做法)。
猜你喜欢
  • 2015-08-31
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
相关资源
最近更新 更多