ios – Autolayout导致UI元素在运行时“捕捉”到位?

ios – Autolayout导致UI元素在运行时“捕捉”到位?,第1张

概述我有一个UIView,顶部是UI ImageView,下面是UILabel,下面是UIButton,还有一个UISegmentedControl,用于确定底部显示嵌入式UIview的内容(也可以选择不显示任何内容). 我遇到了在界面构建器中设置了所有约束的问题,当我在故事板中切换屏幕尺寸时,一切似乎都很好.但是,当我实际在设备上运行项目或模拟时,顶部的UIimage会在“捕捉”到适合约束的大小之前 我有一个UIVIEw,顶部是UI ImageVIEw,下面是UILabel,下面是UIbutton,还有一个UISegmentedControl,用于确定底部显示嵌入式UIvIEw的内容(也可以选择不显示任何内容).

我遇到了在界面构建器中设置了所有约束的问题,当我在故事板中切换屏幕尺寸时,一切似乎都很好.但是,当我实际在设备上运行项目或模拟时,顶部的UIimage会在“捕捉”到适合约束的大小之前被短暂拉伸.此外,似乎标签在短时间内消失,并在图像捕捉到大小后重新出现.发生“快照”后,一切都已就绪,没有任何问题.

在4英寸和3.5英寸显示器上进行测试时都会发生这种卡扣.我发现这很奇怪,因为我已经完美地为4英寸屏幕设计了UI.

有谁知道为什么会这样?

编辑
这是IB中约束的样子.

解决方法 这可能是由于您可能在代码中从视图控制器对UI元素(或约束)进行的调整.例如,如果您以编程方式将不同的UIImage设置到UIImageVIEw中,并且在布局传递已经计算了视图位置和大小后,此代码在视图生命周期中发生得太晚(例如,在vIEwDIDAppear中),那么您将看到可视捕捉,因为视图根据图像视图的新内在内容大小占据新位置.

这可能是由其他调整引起的,例如在代码中将本地化字符串注入UILabel,这会导致标签具有更小或更大的内在内容大小,这反过来会影响基于约束的布局.

如果要在代码中调整UI,请确保它们在vIEwDIDLoad或vIEwWillAppear中发生:这样它们就会在视图的初始布局传递之前发生(以及视图的动画在屏幕上).

如果您仍然遇到问题,可以尝试在vIEwWillAppear结束时在视图控制器的视图上显式强制立即进行布局传递:通过执行以下 *** 作:

- (voID)vIEwWillAppear:(BOol)animated {    [super vIEwWillAppear:animated];    [self.vIEw setNeedsLayout];    [self.vIEw layoutIfNeeded]; // forces an immediate layout pass}
总结

以上是内存溢出为你收集整理的ios – Autolayout导致UI元素在运行时“捕捉”到位?全部内容,希望文章能够帮你解决ios – Autolayout导致UI元素在运行时“捕捉”到位?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1114313.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存