代码之家  ›  专栏  ›  技术社区  ›  halapgos1

以编程方式使用布局定位创建子视图

  •  6
  • halapgos1  · 技术社区  · 8 年前

    我创建了一个 UIView 以编程方式使用 layout anchors . 现在我想添加一个 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
    

    如何实现这种层次结构?

    1 回复  |  直到 8 年前
        1
  •  10
  •   vacawama    8 年前

    您做得很正确,只是没有提供足够的约束。我在Swift游乐场中尝试了您的代码,并添加了一些额外的约束,这表明标签是相对于 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()
    

    下面是在操场上跑步:

    Showing the code running the a Playground

    推荐文章