AutoLayout 在出现时自动更新位置

Posted

技术标签:

【中文标题】AutoLayout 在出现时自动更新位置【英文标题】:AutoLayout updates positions automatically when presented 【发布时间】:2015-01-14 03:40:22 【问题描述】:

我有一个包含多个页面的UIPageViewController,每次滚动到新页面时,内容都会略低于top layout guide。但是当视图最终显示给用户/位于中间时,它会向下移动。

我在storyboards 中使用autolayout 来布置我的内容,并且我设置了Top Space to Top Layout Guide: 5p

这似乎只在使用UIPageViewController 时发生——我通常在AutoLayout 上没有这个问题,这不是我第一次使用pageview controller

有谁知道我可以做什么,以便在将视图呈现给用户之前将其正确放置在顶部布局指南下,因此它不会在呈现后立即跳转?

【问题讨论】:

【参考方案1】:

原来这是 iOS8 的问题,可以通过使用Top Space to View 而不是Top Layout guide 来解决。

我希望这对遇到相同问题的其他人有所帮助。

【讨论】:

【参考方案2】:

对于可能遇到此问题的其他人。我能找到与此相关的最佳答案是在这个 SO 响应中,

[问题]ios 8 UIPageViewController Applying Constraints After Transitions

这个问题是因为在 iOS 8 中默认的自动布局行为是对齐到边距,而在之前的 iOS 版本中它是对齐视图边缘。直到 pageviewcontroller 完成动画后才会计算边距,这就是导致视图跳跃的原因。

但是,可以通过取消选择每个约束的对齐到边距来修复它。希望这对任何人都有帮助。

【讨论】:

以上是关于AutoLayout 在出现时自动更新位置的主要内容,如果未能解决你的问题,请参考以下文章

自动布局和 UIScrollView

使用 AutoLayout 更新 UITableViewCell 子视图的框架

如何停止位置的自动更新

何时在 iOS 7 中使用 AutoLayout 更新约束

如何使元素适合 Xcode IB 中的 AutoLayout?

如何在 redux 状态更新时自动刷新组件