Могу ли я добавить виды автозапуска внутри родительских представлений, которые используют frame, bounds, autoresizingMask
для размещения самой позиции?Автоопределение в макете вручную
Обычно в Интернете вы видите наоборот, но я не могу этого добиться.
Редактировать: Я добавил код для вас, ребята. Просто создайте новый проект Xcode с «Single View Application» и вставьте следующий код на ViewController.swift, созданный для нас.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let custom = CustomManualLayoutSubviews()
let subview = UIView()
let childView = UIView()
custom.backgroundColor = UIColor.redColor()
subview.backgroundColor = UIColor.greenColor()
childView.backgroundColor = UIColor.blueColor()
custom.setTranslatesAutoresizingMaskIntoConstraints(false)
subview.setTranslatesAutoresizingMaskIntoConstraints(false)
childView.setTranslatesAutoresizingMaskIntoConstraints(false)
view.addSubview(custom)
custom.addSubview(subview)
subview.addSubview(childView)
pinToParent(view, child: custom)
pinToParent(subview, child: childView)
}
private func pinToParent(parent: UIView, child: UIView) {
parent.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-10-[view]-10-|",
options: .allZeros, metrics: nil, views: ["view" : child]))
parent.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-10-[view]-10-|",
options: .allZeros, metrics: nil, views: ["view" : child]))
}
}
class CustomManualLayoutSubviews : UIView {
override func layoutSubviews() {
super.layoutSubviews()
for subview in subviews as! [UIView] {
subview.frame = bounds.rectByInsetting(dx: 10, dy: 10)
println("subview frame: \(subview)")
}
}
}
Как вы можете видеть из кода, подтаблица используется ручная компоновкой, а пользовательские и childView используют Autolayout. Но результатом является то, что childView, который использует автозапуск, не отображается на экране, и когда я его проверяю, я вижу, что он имеет ширину 0, 0 height.
Это то, что я получаю, вообще нет синей области.
Вы хотите сделать это с помощью кода? –
Конечно! IB невозможно сделать. – mohamede1945
В настоящее время вы можете сделать множество условных заявлений в IB. –