Swift LayoutSubviews在每次用户交互时移动所有子视图

时间:2016-01-07 21:07:13

标签: ios swift autolayout

如果这个问题已经解决,我很抱歉,但我找不到。

我认为在我的程序中的某些点将UIImageView从屏幕外设置到屏幕上会很简单。所以我创建了UIImageView并将其编码,但是我得到了很多奇怪的行为。我已经缩小了这个事实,即每次用户交互时都会调用layoutSubviews(按下每个按钮),它会重置所有项目的大小和位置。我为每个屏幕项目使用自动布局保存这个,所以这对我想要自动布局的东西很好。但是这一项不断被移回到它的起始位置。我这样证明了这一点:

override func viewDidLoad() {
    super.viewDidLoad()
    print("viewDidLoad")

    let screenWidth = UIScreen.mainScreen().bounds.width
    let screenHeight = UIScreen.mainScreen().bounds.height
    print(image.center)
    image.center = CGPointMake(screenWidth / 2, image.bounds.height / -2)
    print(image.center)
}

override func viewWillLayoutSubviews() {
    print("viewWillLayoutSubviews")
    print(image.center)
}

override func viewDidLayoutSubviews() {
    print("viewDidLayoutSubviews")
    print(image.center)
}

这是我得到的结果:

viewDidLoad
(294.0, 228.0)
(160.0, -64.0)
viewWillLayoutSubviews 
(160.0, -64.0) 
viewDidLayoutSubviews 
(294.0, 228.0)

我没有任何附加于此视图的约束。思考?我想我可以存储位置并不断地手动移动它,但我确定某个地方有一个开关可以关闭特定项目的自动布局。我找不到它。

感谢您的帮助......

1 个答案:

答案 0 :(得分:0)

图片必须autoresizingMasks才能转化为约束。

通过执行以下操作禁用它:

image.translatesAutoresizingMaskIntoConstraints = false