我有一个UIView
,其顶部有一个UIImageView
,低于UILabel
,低于UIButton
,UISegmentedControl
决定了UIview
什么决定了嵌入式UIimage
在底部显示的内容(也可以选择不显示任何内容)。
我遇到了我在界面构建器中设置了所有约束的问题,当我在故事板中切换屏幕尺寸时,一切似乎都很好。但是,当我实际在设备上运行项目或模拟时,顶部的{{1}}会在" snpping"之前被短暂拉伸。大小适合约束。此外,似乎标签在短时间内消失,并在图像捕捉到大小后重新出现。在" snap"之后已经发生,一切都到位,没有问题。
在4英寸和3.5英寸显示器上进行测试时都会发生这种卡扣。我发现这很奇怪,因为我已经完美地为4英寸屏幕设计了用户界面。
有谁知道为什么会这样?
修改 这里的限制是IB中的限制。
答案 0 :(得分:6)
这可能是由于您可能在代码中从视图控制器对UI元素(或约束)进行的调整。例如,如果您以编程方式将不同的UIImage设置到UIImageView中,并且在布局传递已经计算了视图位置和大小之后,此代码在视图生命周期中发生得太晚(例如,在viewDidAppear
中),那么当视图根据图像视图的新内在内容大小占据新位置时,您将看到可见的快照。
这可能是由其他调整引起的,例如在代码中将本地化字符串注入UILabel,这会导致标签具有更小或更大的内在内容大小,这反过来会影响基于约束的布局。
如果您要在代码中对UI进行调整,请确保它们在viewDidLoad
或viewWillAppear:
中发生,以便它们在视图的初始布局通过之前发生(以及视图&# 39;屏幕上的动画。)
如果您仍然遇到问题,可以尝试通过执行以下操作,明确强制在viewWillAppear:
末尾的视图控制器视图上发生即时布局传递:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.view setNeedsLayout];
[self.view layoutIfNeeded]; // forces an immediate layout pass
}
答案 1 :(得分:2)
UIElements之间的间距可能是问题所在。特别是在使用Pickers时
答案 2 :(得分:2)
知道了,你已经为Picker应用了约束来调整分段控件。因此,当app在4英寸屏幕上运行时,拾取器会自动适合,但对于3.5英寸拾取器总是从屏幕底部开始,拾取器将向上推动分段控制,因此分段控制将自动推动静止控制。 删除选择器和分段控制约束。