Хорошо, поэтому в интерфейсном построителе (Main.storyboard
) у меня есть containerView:UIView
, встроенный в UIScrollView
. Внутри в containerView
я хочу создать дополнительные UIView
для хранения блоков контента, таких как заголовок, тело и т. Д. Причиной для этого является то, что контент может прокручиваться по вертикали, но не по горизонтали.Определение ширины UIView с использованием автовыброса - SWIFT
Моя цель - использовать автозапуск для создания этих разных UIView
. На данный момент контейнерView автоматически настраивает его ширину в зависимости от размера экрана используемого устройства, чтобы предотвратить горизонтальную прокрутку. Это делается с использованием созданного мной IBOutlet для ограничения ширины. В настоящее время она выглядит так:
@IBOutlet var containerView: UIView!
@IBOutlet var containerViewWidthConstraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
//Prevents horizontal scrolling
containerViewWidthConstraint.constant = self.view.frame.size.width
createHeader()
}
Затем я создал функцию, называемую createheader{}
, какие контакты с headerView:UIView
в верхней части containerView
и 8 баллов из любого края containerView
:
func createHeader() {
//Create header
let headerView = UIView()
headerView.backgroundColor = UIColor.blueColor()
self.containerView.addSubview(headerView)
//Create header constraints
let leftMargin = NSLayoutConstraint(item: headerView, attribute: .Leading, relatedBy: .Equal, toItem: containerView, attribute: .Leading, multiplier: 1.0, constant: 8)
let rightMargin = NSLayoutConstraint(item: containerView, attribute: .Trailing, relatedBy: .Equal, toItem: headerView, attribute: .Trailing, multiplier: 1.0, constant: 8)
let topMargin = NSLayoutConstraint(item: headerView, attribute: .Top, relatedBy: .Equal, toItem: containerView, attribute: .Top, multiplier: 1.0, constant: 70)
let heightConstraint = NSLayoutConstraint(item: headerView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1.0, constant: 160)
//Activate header constraints
headerView.setTranslatesAutoresizingMaskIntoConstraints(false)
NSLayoutConstraint.activateConstraints([leftMargin,rightMargin,topMargin,heightConstraint])
println(headerView.frame.size.width)
}
Теперь так размер содержимого внутри headerView
будет зависеть от размера экрана используемого устройства, я хочу иметь возможность создавать функции, которые определяют ширину содержимого в зависимости от размера ширины самого headerView
. Однако каждый раз, когда я пытаюсь захватить ширину headerView
с помощью:
println(headerView.frame.size.width)
возвращает нулевое значение, которое, очевидно, не так, потому что он по-прежнему создает сине-фон headerView
в соответствии с вышеуказанными ограничениями.
Почему SWIFT не признает, что ширина headerView
имеет ширину? И как я могу захватить ширину headerView
?
Как раз сейчас я связываюсь с 'containerView', чтобы захватить ширину:' (containerView.frame.size.width - 16) '. Я до сих пор не понимаю, почему «headerView» распознается как имеющий ширину ... – Yonny
Почему бы вам просто не добавить ограничения для вашего нового содержимого внутри «headerView»? – dGambit
Это план, но как я могу, если 'headerView' признан не имеющим ширины? Например, я хотел разместить квадратное изображение, которое автоматически изменяется и центрируется внутри 'headerView'. Это делается с использованием ограничения соотношения сторон 1: 1 и двух равных горизонтальных ограничений, одного '.Trailing' и одного' .Leading'. Но когда я пошел создавать горизонтальные ограничения, относящиеся к ширине 'headerView' ...' headerView.frame.size.width/3.5', это значение возвращалось как 0.0 – Yonny