forEach自动布局约束未出现

时间:2020-10-22 04:34:36

标签: swift for-loop foreach autolayout

我的swifts代码,它使用for循环显示到imageviews。现在,代码已构建,但是什么也没有出现。我知道我必须将第二个框的前导锚约束移到.25上。但我认为第一个框为box1会出现,但再也没有出现,我也不知道为什么。

import UIKit

class ViewController: UIViewController {
    var box1 = UIButton();var box2 = UIButton()
    override func viewDidLoad() {
        super.viewDidLoad()
        [box1,box2].forEach{
            view.addSubview($0)
            $0.backgroundColor = .red
            $0.translatesAutoresizingMaskIntoConstraints = false
            
            
            $0.heightAnchor.constraint(equalTo: $0.heightAnchor, multiplier: 30).isActive = true
            
            $0.widthAnchor.constraint(equalTo: $0.widthAnchor, multiplier: 30).isActive = true
            $0.leadingAnchor.constraint(equalTo: $0.leadingAnchor ).isActive = true
            $0.topAnchor.constraint(equalTo: $0.topAnchor).isActive = true

        }
    }
    
    
}

photo

2 个答案:

答案 0 :(得分:0)

您正在使用的以下代码没有任何意义。您正在尝试将leadingAnchortopAnchor中的box1box2添加到自己。

$0.leadingAnchor.constraint(equalTo: $0.leadingAnchor ).isActive = true
$0.topAnchor.constraint(equalTo: $0.topAnchor).isActive = true

相反,您需要将约束添加到self.view

self.view.leadingAnchor.constraint(equalTo: box1.leadingAnchor).isActive = true
box1.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true

将以上代码移出forEach循环。

对于box2,您需要用图像更新问题说明,以阐明box1box2的布局。

答案 1 :(得分:0)

我不知道您要在视图中放置按钮的位置,因为您还没有将任何视图都指向要对齐的按钮。尝试以下代码,让我知道它是否适合您。

        $0.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 15).isActive = true
        $0.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 15).isActive = true

        $0.heightAnchor.constraint(equalToConstant: 30).isActive = true
        $0.widthAnchor.constraint(equalToConstant: 30).isActive = true

请注意,您尝试使用“ 乘数”而不是“ equalToConstant ”来设置高度。是的,您可以使用乘数,但前提是您要根据父视图或任何其他视图缩放图像,但在这种情况下,您需要将其设置为常量,因为要为其提供浮点值。