我試圖更改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做工精細,它會立即更改。這種方法有什麼問題?
試着把你的代碼放在'viewWillLayoutSubviews()' – AnthonyR
@AnonyRoani但是如果我應該完成這些動作5次呢?它會添加許多額外的代碼行。 – Slava
我不明白你爲什麼使用這些委託方法。爲什麼不在你的元素框架被改變之後調用'self.layoutIfNeeded()'?這將更新框架。我認爲你不應該爲你的情況使用'layoutSubviews()'方法(因爲你的UIButton框架似乎一直在改變) – AnthonyR