Я могу предложить пару идей (до кодирования ..):
1) ваш графический / креативный дизайн должен точно рассматривать макет как точку зрения UX. После этой огромной работы вы можете начать кодирование.
2) Конечно, вы можете использовать код без ограничений. Как программист, вы предпочитаете заниматься математикой, а не мышью. Но будьте осторожны: использование ограничений гораздо более гибко, и вы тоже можете смешивать код.
3) распространенным и глубоким подходом может быть реализация layoutSubviews в каждом представлении.
пример:
override func layoutSubviews() {
super.layoutSubviews()
self.titleLabel?.sizeToFit()
self.subTitle?.sizeToFit()
self.callLabel?.sizeToFit()
if(self.subTitle?.text == nil) {
self.callLabel?.center.y = (self.titleLabel?.center.y)!
}
}
но, честно говоря, для базовых потребностей лучше использовать ограничения и в конечном итоге добавить IBOutlet, чтобы вы могли контролировать в коде, например, высоту в пользовательском представлении:
final func setH(Hconstraint: NSLayoutConstraint!){
var h = Hconstraint!.constant
if (.... add your test based on models, orientation...){
h = H1
}else{
h = H2
}
Hconstraint.constant = h // re-apply height.
self.setNeedsDisplay() // to trigger redraw... seems needed in some cases...
}
(вы также можете добавить этот код в контроллер ... но лучше поместить его в пользовательский вид, чтобы логика была там ..)