【问题标题】:NSLayoutConstraints not working in reference to viewNSLayoutConstraints 在参考视图中不起作用
【发布时间】:2017-05-24 20:49:55
【问题描述】:

我想根据视图大小创建一个容器视图。代码不言自明,但它不起作用。我试过使用覆盖 viewWillAppear 无济于事。

导入 UIKit

class ViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout, UITextFieldDelegate {

let searchBarContainer: UIView = {
    let sBarContainer = UIView()
    sBarContainer.backgroundColor = UIColor.gray
    return sBarContainer
}()



override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.title = "Search Bar"
    collectionView?.backgroundColor = UIColor.white

    view.addSubview(searchBarContainer)

    NSLayoutConstraint(item: searchBarContainer, attribute: .width, relatedBy: .equal, toItem: view, attribute: .width, multiplier: 1, constant: 0).isActive = true

    NSLayoutConstraint(item: searchBarContainer, attribute: .height, relatedBy: .equal, toItem: view, attribute: .height, multiplier: 1, constant: 0).isActive = true

    NSLayoutConstraint(item: searchBarContainer, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1, constant: 0).isActive = true

   }


}

有什么建议吗?谢谢

【问题讨论】:

  • 你没有设置子视图的 x 位置
  • 你还需要将translatesAutoresizingMaskIntoConstraints设置为false

标签: ios swift nslayoutconstraint


【解决方案1】:

像这样创建 NSLayoutConstraints 只会返回约束。您要么需要将它们添加到父视图,要么如果您是 iOS 8+,则可以使用更高级的布局锚。

所以,例如:

NSLayoutConstraint(item: searchBarContainer, attribute: .width, relatedBy: .equal, toItem: view, attribute: .width, multiplier: 1, constant: 0).isActive = true

变成

label.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true

编辑:明确地说,锚路由意味着您不必在创建它们后手动添加它们。

【讨论】:

    猜你喜欢
    • 2015-06-13
    • 1970-01-01
    • 2017-05-11
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 2020-02-17
    • 2016-05-29
    相关资源
    最近更新 更多