在视图出现在屏幕上之前进行转换时,自动布局错误地定位子视图
Posted
技术标签:
【中文标题】在视图出现在屏幕上之前进行转换时,自动布局错误地定位子视图【英文标题】:Autolayout incorrectly positioning subviews when transforming before view is on screen 【发布时间】:2014-09-09 03:53:02 【问题描述】:我正在尝试在我的视图在屏幕上绘制之前对其进行缩放。但是,当我这样做时,视图的子视图(使用自动布局对齐)在视图最终出现在屏幕上时未对齐。这是我在viewDidLoad:
中的缩放比例
let customView = CustomView(frame: CGRect(x: 0, y: 0, width: 320, height: 568)
self.view.addSubview(customView)
customView.transform = CGAffineTransformMakeScale(0.8, 0.8)
如果我将customView
添加到我的控制器的视图中并等待转换视图直到viewDidAppear:
,最终呈现是预期的结果。但是,有一个瞬间没有缩放视图。
在我的视图绘制到屏幕上之前,我需要在我的自定义视图中实现什么以允许自动布局响应转换?
我的视图的基本结构是UIView
,UITextView
作为它的孩子。文本视图的约束非常简单:
NSLayoutConstraint.constraintsWithVisualFormat("H:|-[textView]-|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["textView": textView])
NSLayoutConstraint(item: textView, attribute: .CenterY, relatedBy: .Equal, toItem: self, attribute: .CenterY, multiplier: 1, constant: 0)
【问题讨论】:
【参考方案1】:简答: 如果我正确理解您的问题,您想覆盖 viewDidLayoutSubviews 而不是 viewDidLoad / viewDidAppear。 viewWillAppear 可能也会起作用。
更长的答案:
viewDidLoad 的意思就是——它在视图加载后被调用,就是这样! Autolayout 尚未运行,或者 layoutSubviews 尚未运行。您应该只在布局发生期间或之后应用转换。最早这样做是在 viewDidLayoutSubviews 中。另外,别忘了打电话给超级!
【讨论】:
以上是关于在视图出现在屏幕上之前进行转换时,自动布局错误地定位子视图的主要内容,如果未能解决你的问题,请参考以下文章