NSLayoutConstraints 不参考视图工作
NSLayoutConstraints not working in reference to view
我想根据视图大小创建容器视图。该代码不言而喻,但它不起作用。我试过使用覆盖 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
}
}
有什么建议吗?谢谢
像那样创建 NSLayoutConstraints 只会 return 约束。您要么需要将它们添加到父视图,要么如果您是 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
编辑:需要说明的是,锚路由意味着您无需在创建它们后手动添加它们。
我想根据视图大小创建容器视图。该代码不言而喻,但它不起作用。我试过使用覆盖 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
}
}
有什么建议吗?谢谢
像那样创建 NSLayoutConstraints 只会 return 约束。您要么需要将它们添加到父视图,要么如果您是 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
编辑:需要说明的是,锚路由意味着您无需在创建它们后手动添加它们。