【问题标题】:forEach auto layout Constraints not appearingforEach 自动布局约束未出现
【发布时间】:2020-10-22 04:34:36
【问题描述】:

我的 swifts 代码使用 for 循环显示到图像视图。现在代码构建但没有出现。我知道我必须将第二个框的前导锚约束移动到 0.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

【问题讨论】:

  • 您希望按钮如何显示在屏幕上?添加示例图片。

标签: swift for-loop foreach autolayout


【解决方案1】:

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

$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 的布局。

【讨论】:

  • 我在我的问题中添加了一张我在上面寻找的照片。谢谢
【解决方案2】:

我不知道您试图将按钮放置在视图中的哪个位置,因为您没有将任何视图引用到要对齐的按钮。试试下面的代码,让我知道它是否适合你。

        $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

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

【讨论】:

  • 我在我的问题中添加了一张我在上面寻找的照片。谢谢
  • 上面的代码对你有用吗?屏幕上是否出现了一个按钮? @joebuck
  • 按钮出现了,但只出现了1个按钮
  • 是的,完全正确。您的 forEach 循环将遍历您的视图,并为您保存在数组中的所有视图提供完全相同的约束。您必须为不同的视图提供不同的约束。这就是为什么只显示一个按钮,而另一个按钮位于另一个按钮后面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
  • 2012-10-07
  • 2015-04-06
相关资源
最近更新 更多