Ответ 1
Добавьте это, и вы хорошо пойдете:
override func viewDidLayoutSubviews() {
println(self.view1.frame.size)
}
вы можете посмотреть ширину или высоту, как вам удобно.
В Swift, как мне получить ширину (или высоту) во время выполнения, UIView, который был создан программно с использованием ограничений автоматической компоновки?
Я пробовал view1.frame.size.width
и view1.frame.width
, но оба возвращали 0
.
Я следил за учебником по авто макету MakeAppPie и добавил view1.layer.cornerRadius = view1.bounds.width/2
, как показано ниже, но это не имело никакого эффекта, поэтому Я сделал po на view1.bounds.width
и получил 0
:
class ViewController: UIViewController {
func makeLayout() {
//Make a view
let view1 = UIView()
view1.setTranslatesAutoresizingMaskIntoConstraints(false)
view1.backgroundColor = UIColor.redColor()
//Make a second view
let view2 = UIView()
view2.setTranslatesAutoresizingMaskIntoConstraints(false)
view2.backgroundColor = UIColor(red: 0.75, green: 0.75, blue: 0.1, alpha: 1.0)
//Add the views
view.addSubview(view1)
view.addSubview(view2)
//--------------- constraints
//make dictionary for views
let viewsDictionary = ["view1":view1,"view2":view2]
//sizing constraints
//view1
let view1_constraint_H:Array = NSLayoutConstraint.constraintsWithVisualFormat("H:[view1(>=50)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary)
let view1_constraint_V:Array = NSLayoutConstraint.constraintsWithVisualFormat("V:[view1(50)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary)
view1.addConstraints(view1_constraint_H)
view1.addConstraints(view1_constraint_V)
//view2
let view2_constraint_H:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("H:[view2(50)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary)
let view2_constraint_V:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("V:[view2(>=40)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary)
view2.addConstraints(view2_constraint_H)
view2.addConstraints(view2_constraint_V)
//position constraints
//views
let view_constraint_H:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("H:|-100-[view2]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary)
let view_constraint_V:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("V:|-136-[view1]-100-[view2]-100-|", options: NSLayoutFormatOptions.AlignAllTrailing, metrics: nil, views: viewsDictionary)
view.addConstraints(view_constraint_H)
view.addConstraints(view_constraint_V)
view1.layer.cornerRadius = view1.bounds.width/2
}
override func viewDidLoad() {
super.viewDidLoad()
func supportedInterfaceOrientations() -> Int {
return Int(UIInterfaceOrientationMask.All.rawValue)
}
// Do any additional setup after loading the view, typically from a nib.
view.backgroundColor = UIColor(red: 0.9, green: 0.9, blue: 1, alpha: 1.0)
makeLayout()
}
}
Добавьте это, и вы хорошо пойдете:
override func viewDidLayoutSubviews() {
println(self.view1.frame.size)
}
вы можете посмотреть ширину или высоту, как вам удобно.
Только об этих полях:
self.view1.frame.size.width
self.view1.frame.size.height
Являются ли только фактические размеры пользовательского устройства, если представление было отображено на экране, иначе они будут такими, какие вы установили в раскадровке. Поэтому, если вы попытаетесь выполнить какой-то расчет до того, как будет нарисован вид, вам придется вычислять ширину или высоту другим способом!
вы можете использовать этот
self.view1.frame.size.width
self.view1.frame.size.height