在视图在屏幕上之前进行转换时,Autolayout错误地定位子视图

时间:2014-09-09 03:53:03

标签: ios uiview swift autolayout

我试图在我在屏幕上绘制之前缩放视图的变换。但是,当我这样做时,视图的子视图 - 使用自动布局对齐 - 在视图最终出现在屏幕上时未对齐。这是我在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 个答案:

答案 0 :(得分:0)

简答: 如果我正确理解您的问题,您希望覆盖viewDidLayoutSubviews而不是viewDidLoad / viewDidAppear。 viewWillAppear可能也会起作用。

更长的答案:

viewDidLoad就是说 - 在加载视图后调用它,就是这样! Autolayout还没有运行,或者layoutSubviews就此而言。您应该只在布局发生期间或之后应用变换。最早的时间是在viewDidLayoutSubviews中。另外,不要忘记给超级打电话!