我正在尝试在viewDidLayoutSubviews()中更改某些对象的大小和位置。方法fixPositions()被调用,但所有更改仅在我进入下一个屏幕后才适用。
这是我的代码:
override func viewDidLayoutSubviews() {
let width = filterMainView.frame.width / 5
filterView.frame = CGRectMake(0.0, 0.0, width, 50.0)
fixPositions(filterSubview, image: filterImage, button: filterButton, width: width)
}
func fixPositions(mainView: UIView, image: UIImageView, button: UIButton, width: CGFloat) {
let buttonFrame = CGRectMake(0.0, 0.0, width, 50.0)
button.frame = buttonFrame
mainView.frame = buttonFrame
image.frame = CGRectMake((width - 30.0)/2, 10.0, 30.0, 30.0)
}
此外,filterView工作正常,它会立即更改。这种方法有什么问题?
答案 0 :(得分:0)
此逻辑应位于viewWillLayoutSubviews
viewdidLayoutSubviews
。将布局逻辑放在那里可能会很糟糕,因为你可能会进入无限的布局和重新布局循环。
答案 1 :(得分:0)
在更改元素框架之后调用self.layoutIfNeeded()
将更新框架。当帧总是在变化时使用它会更好。