swift 为什么UIView()背景不适用?(编程)

xvw2m8pv  于 2023-03-16  发布在  Swift
关注(0)|答案(1)|浏览(122)

我试图加载uiView。这个视图应该有50点距离右下方标签。但模拟器显示更多的小距离。所以我试图设置uiView的背景色来检查这个视图如何占用,但它不工作?我的代码的主要问题是什么?
这里是屏幕截图和代码

private let helpLabelView: UIView = {
        let container = UIView()
        let label1 = UILabel(frame: CGRect(x: 0, y: 0, width: 300, height: 20))
        label1.text = "비밀번호를 설정해주세요."
        label1.font = UIFont(name: "Pretendard-Regular", size: 15)
        label1.backgroundColor = .cyan
        
        let label2 = UILabel(frame: CGRect(x: 0, y: 20, width: 300, height: 20))
        label2.text = "(영어 대소문자, 숫자, 특수문자 각 1개 이상 사용)"
        label2.font = UIFont(name: "Pretendard-Regular", size: 15)
        label2.backgroundColor = .green
        
        container.addSubview(label1)
        container.addSubview(label2)
        
        container.backgroundColor = .brown // this line not applied
        
        return container
    }()
view.addSubview(helpLabelView)
helpLabelView.translatesAutoresizingMaskIntoConstraints = false
pwLabel.bottomAnchor.constraint(equalTo: pwField.topAnchor, constant: -11),
            pwLabel.leftAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leftAnchor, constant: 20),
            helpLabelView.bottomAnchor.constraint(equalTo: pwLabel.topAnchor, constant: -50),
            helpLabelView.leftAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leftAnchor, constant: 20),
  • pwLabel位于HelpLabelView标签下方附近**所有视图均设置为活动 *
up9lanfz

up9lanfz1#

问题是helpLabelViewsize 没有约束,所以它的size自动设置为(0,0)。容器视图就像蓝色标签左上角的一个不可见的点。
从图片上看,考虑到绿色和蓝色标签的高度都是20,蓝色标签的左上角确实距离pwLabel的顶部大约有50个点。
因此,一个简单的解决方案是添加一些关于宽度和高度的约束:

helpLabelView.widthAnchor.constraint(equalToConstant: 300),
helpLabelView.heightAnchor.constraint(equalToConstant: 40),

这将解决间距问题,但您仍然看不到棕色背景,因为蓝色和绿色背景完全覆盖了helpLabelView的背景。要看到棕色背景,您需要给予它一个更大的尺寸。
最后但同样重要的是,考虑使用UIStackView来包含两个标签,而不是硬编码所有标签的宽度和高度。

相关问题