Невозможно изменить макет по умолчанию.
Начиная с ios 8.0 просмотров есть дополнительные layoutMargins
который по умолчанию имеет 8 баллов для каждой стороны.
Когда я пытаюсь изменить поля в viewDidLoad
это, кажется, не влияет на дочерние представления:
override func viewDidLoad(){
super.viewDidLoad()
self.view.layoutMargins = UIEdgeInsets(top:100, left:100, bottom:100, right:100)
}
..itd, похоже, не имеет никакого эффекта и
3 ответа
Вы пытаетесь установить поле макета корневого представления контроллера представления. Корневое представление ведет себя иначе, чем любое другое представление в иерархии в отношении полей макета.
Поля макета корневого представления управляются исключительно контроллером представления, их нельзя установить.
Из документации Apple:
Если представление является корневым представлением контроллера представления, система устанавливает и управляет полями. Верхнее и нижнее поля устанавливаются на ноль. Боковые поля варьируются в зависимости от текущего размера, но могут составлять 16 или 20 баллов. Вы не можете изменить эти поля.
https://developer.apple.com/reference/uikit/uiview/1622566-layoutmargins
Я использовал KVO для определения изменений view.layoutMargins. И я обнаружил, что само представление изменит layoutMargins после настройки во время layoutSubViews
обработка.
Так что просто поместите ваши коды настройки в viewDidLayoutSubviews
метод:
- (void)viewDidLayoutSubviews
{
self.view.layoutMargins = UIEdgeInsetsMake(100.0f, 100.0f, 100.0f, 100.0f);
}
PS: через эти коды OC, но я думаю, что это также может работать для Swift. Надеюсь, что это работает для вас!
Я не уверен, в чем проблема.
override func viewDidLoad() {
super.viewDidLoad()
self.view.layoutMargins = UIEdgeInsets(top:100, left:100, bottom:100, right:100)
println(self.view.layoutMargins.top)
println(self.view.layoutMargins.left)
println(self.view.layoutMargins.right)
println(self.view.layoutMargins.bottom)
}
Это печатает 100 для каждого поля. Если вы пытаетесь установить поля для подпредставлений этого представления, вам также необходимо установить их явно. Вызов self.view.layoutMargins влияет только на layoutMargins self.view.
Если вы хотите, чтобы подпредставления вашего представления уважали layoutMargins суперпредставления вашего представления, вам нужно будет установить preastsSuperviewLayoutMargins для вашего представления.