【问题标题】:Creating subviews using layout anchors programmatically以编程方式使用布局锚创建子视图
【发布时间】:2018-08-04 17:06:36
【问题描述】:

我使用layout anchors 以编程方式创建了一个UIView。现在我想在这个视图中添加一个UILabel。到目前为止,这是我的代码:

let centerView = UIView()
centerView.translatesAutoresizingMaskIntoConstraints = false
centerView.backgroundColor = UIColor.white
view.addSubview(centerView)
centerView.leftAnchor.constraint(equalTo: view.leftAnchor, constraint: 20).isActive = true
centerView.rightAnchor.constraint(equalTo: view.rightAnchor, constraint: -20).isActive = true

let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "Testing" 
label.textColor = UIColor.black
centerView.addSubview(label)
label.leftAnchor.constraint(equalTo: centerView.leftAnchor).isActive = true

我认为这个标签会参考centerView 来显示,但实际上它是参考UIWindow 来显示的。这是当前的视图层次结构:

UIWindow --> UIView (centerView) --> UILabel (label)

我需要在centerView 中添加多个标签,据我了解,这条链会变长,而我希望多个标签都在centerView

         UIWindow

            |

     UIView (centerView)

     /      |      \
  Label 1  Label 2  Label 3

我怎样才能实现这种类型的层次结构?

【问题讨论】:

    标签: ios swift constraints layout-anchor


    【解决方案1】:

    你做得对,只是你没有提供足够的约束。我在 Swift Playground 中尝试了您的代码并添加了一些额外的约束,它表明标签是相对于 centerView 放置的:

    let view = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 500))
    
    let centerView = UIView()
    centerView.translatesAutoresizingMaskIntoConstraints = false
    centerView.backgroundColor = UIColor.white
    view.addSubview(centerView)
    centerView.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 20).isActive = true
    centerView.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -20).isActive = true
    centerView.topAnchor.constraint(equalTo: view.topAnchor, constant: 20).isActive = true
    centerView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -20).isActive = true
    
    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.text = "Testing"
    label.textColor = UIColor.black
    label.backgroundColor = UIColor.yellow
    centerView.addSubview(label)
    label.leftAnchor.constraint(equalTo: centerView.leftAnchor).isActive = true
    label.topAnchor.constraint(equalTo: centerView.topAnchor).isActive = true
    
    view.layoutIfNeeded()
    

    这是在操场上跑步:

    【讨论】:

    • 是的,经过更多测试后,我也意识到了这一点。感谢您的明确解释:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多