以编程方式更改对象的大小和位置

时间:2016-05-26 19:25:18

标签: ios swift

我正在尝试在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工作正常,它会立即更改。这种方法有什么问题?

2 个答案:

答案 0 :(得分:0)

此逻辑应位于viewWillLayoutSubviews

中 布局完成后调用

viewdidLayoutSubviews。将布局逻辑放在那里可能会很糟糕,因为你可能会进入无限的布局和重新布局循环。

答案 1 :(得分:0)

在更改元素框架之后调用self.layoutIfNeeded()将更新框架。当帧总是在变化时使用它会更好。