traitCollectionDidChange中更新的约束无效

时间:2017-08-21 16:35:41

标签: ios xcode autolayout constraints

通过我的自动布局,我正在尝试为最小的屏幕实现一个特殊情况,当我的图标需要更小时。我正在更改traitCollectionDidChange()中图标的约束。但是,改变没有效果。我已经尝试添加SetNeedsLayout,SetNeedsDisplay,UpdateConstraints等,但没有任何作用。

如果我在初始化视图时更改了这些约束,那么更改可以正常工作 - 但是当用户旋转设备并且我需要再次进行更改时,这对我没有帮助。但是,有趣的是,在程序启动时会调用traitCollectionDidChange(),但是如果我在该函数中进行约束更改,则它们不起作用。它们只有在我在视图的init()函数中设置新约束时才有效。

可能是在使用约束之后调用此函数,除了Apple告诉我们将此函数用于此目的,在旋转时更改布局等。我不想使用WillTransitionToSize,因为只使用该函数调用ViewController,而不是视图。但我可能会尝试下一步。

traitCollectionDidChange()肯定会在启动时和旋转时被调用。只是我的改变没有做任何事情。有什么想法吗?

有什么想法吗?

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {

    super.traitCollectionDidChange(previousTraitCollection)

    // smaller icon constraints for iPhone 5/SE

    if let constraint = (self.imageView!.constraints.filter{$0.firstAttribute == .width}.first) {
        print("cwide \(constraint.constant)")
        if UIScreen.main.bounds.size.width <= 320 {
            constraint.constant = 20.0
            self.radius = 4

        }
        else {
            constraint.constant = 32.0
            self.radius = 8
        }

    }

    self.updateConstraints()
}

1 个答案:

答案 0 :(得分:0)

我有一个类似的功能,结果发现我忘记了在界面生成器中安装 约束。