Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么约束不能以编程方式工作?_Ios_Swift_Uiimageview_Constraints - Fatal编程技术网

Ios 为什么约束不能以编程方式工作?

Ios 为什么约束不能以编程方式工作?,ios,swift,uiimageview,constraints,Ios,Swift,Uiimageview,Constraints,我想在手机旋转时更改imageView的高度约束,我使用了以下代码: var newPageView = UIImageView(image: nil) override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { let heightConstraint = NSLayoutCons

我想在手机旋转时更改imageView的高度约束,我使用了以下代码:

var newPageView = UIImageView(image: nil)

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    let heightConstraint = NSLayoutConstraint(item: newPageView, attribute: .Height, relatedBy: .Equal, toItem: newPageView.superview, attribute: .Height, multiplier: 1, constant: 600)
    newPageView.superview!.addConstraint(heightConstraint)
}
但它不起作用。我的代码片段有什么错误

  • 要更改
    imageView
    的高度,您需要将约束添加到
    imageView
    ,而不是
    superview
  • 在添加新高度约束之前,必须删除以前的高度约束
  • 我认为保留对约束的引用并在需要时对其进行更改比删除并添加约束要好。例如:

    var imageView = UIImageView(image: nil)
    var heightConstant : NSLayoutConstraint!
    
    override func viewDidLoad()
    {
        super.viewDidLoad()
    
        heightConstant = NSLayoutConstraint(item: imageView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 800)
        imageView.addConstraint(heightConstant)
    }
    
    override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator)
    {
        heightConstant.constant = 600
    }
    
  • 要更改
    imageView
    的高度,您需要将约束添加到
    imageView
    ,而不是
    superview
  • 在添加新高度约束之前,必须删除以前的高度约束
  • 我认为保留对约束的引用并在需要时对其进行更改比删除并添加约束要好。例如:

    var imageView = UIImageView(image: nil)
    var heightConstant : NSLayoutConstraint!
    
    override func viewDidLoad()
    {
        super.viewDidLoad()
    
        heightConstant = NSLayoutConstraint(item: imageView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 800)
        imageView.addConstraint(heightConstant)
    }
    
    override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator)
    {
        heightConstant.constant = 600
    }
    

    你有没有检查过这个链接-@rajapt我想要它在Swift中,而不是在objc中,你说它不工作是什么意思;图像的大小是否会更改为您想要的大小以外的其他大小?您只需在viewDidLoad或类似工具上设置一次高度约束。de设备旋转时,高度将根据您的约束自动调整大小。在您的示例中,每次设备旋转时,您都会一次又一次地添加约束,这可能会导致不可预测的结果。您是否检查了此链接-@Rajatp我希望它在Swift中,而不是在objc中?您的意思是它不起作用;图像的大小是否会更改为您想要的大小以外的其他大小?您只需在viewDidLoad或类似工具上设置一次高度约束。de设备旋转时,高度将根据您的约束自动调整大小。在您的示例中,每次设备旋转时都会反复添加约束,这可能会导致不可预测的结果。