Ios setNeedsUpdateContraints()是否忽略了我?

Ios setNeedsUpdateContraints()是否忽略了我?,ios,autolayout,constraints,size-classes,Ios,Autolayout,Constraints,Size Classes,我有一个故事板,使用自动布局和大小类。我已经放弃了让UIView使用纵横比1:1约束的尝试。它接管了整个屏幕,而不是像UIImageViewer那样只设置高度=宽度 因此,我尝试更改宽度和高度约束。在IB中,宽度约束设置为320,高度约束设置为320。最后,我会将宽度约束设置为设备的宽度,将高度约束设置为设备的宽度,希望得到一个正方形的UIView,以便相机显示其会话 但是,当我设置常量,然后设置NeedSupdateConstraints时,什么都没有发生。是的,我不希望这样做,但我也希望让这

我有一个故事板,使用自动布局和大小类。我已经放弃了让UIView使用纵横比1:1约束的尝试。它接管了整个屏幕,而不是像UIImageViewer那样只设置高度=宽度

因此,我尝试更改宽度和高度约束。在IB中,宽度约束设置为320,高度约束设置为320。最后,我会将宽度约束设置为设备的宽度,将高度约束设置为设备的宽度,希望得到一个正方形的UIView,以便相机显示其会话

但是,当我设置常量,然后设置NeedSupdateConstraints时,什么都没有发生。是的,我不希望这样做,但我也希望让这个&^&$^#(东西能够工作,不要再花太多的时间去做了。将前导空间设置为0,尾随空间设置为0,顶部空间设置为0,纵横比设置为1:1不起作用。即使我使用UIImageView进行了设置,并且它确实可以工作

@IBOutlet var captureFrame: UIView!
@IBOutlet var viewHeightConstraint: NSLayoutConstraint!
@IBOutlet var viewWidthConstraint: NSLayoutConstraint!

override func viewDidAppear(animated: Bool) {
    self.viewWidthConstraint.constant = 100  //100 = temporary
    self.viewHeightConstraint.constant = 100  //100 = temporary
    captureFrame.setNeedsUpdateConstraints()
    captureFrame.layoutIfNeeded()
}
你知道如何得到一个正方形的UI视图,这样相机就可以用IB、自动布局、大小类在其中显示,而不用放大X2吗


为什么我的约束没有调整到100?为什么我的UIView仍然是320 x 320?

我不知道为什么你的纵横比约束不起作用。当我按照你说的做时(顶部、左侧和右侧的约束为0,纵横比为1:1),它对我来说很好(因为视图是600x600,所以它看起来像是在IB中占据整个屏幕,但在运行时是正确的).没错。我希望它能正常工作,但事实并非如此。我花了8个小时试图让它正常工作。得到这一点,它在所有设备的IB预览中看起来都很完美。但是,当我在设备上运行它时,UIView非常大。它覆盖了整个屏幕,你可以看出它正在脱离屏幕。但是UIImageView在设备上的行为与预期的一样。它必须有:var previewLayer:AVCaptureVideoPreviewLayer吗?我甚至尝试将底部约束设置为一个按钮。这样看起来不错,但相机看起来放大了2倍。如果我在所有设备上都设置了320x320大小,它工作得很好是否记录了约束冲突错误?没有。根本没有错误。我不能再浪费时间了在它上面。我更喜欢使用纵横比约束。宽度和高度约束只是一个变通方法。所以变通方法二是只在代码中创建视图,并将其添加为子视图,而不是使用IB。这样做是有效的,因此,在有人帮我固定纵横比之前,这是我的路线,因此我可以继续工作。