2016-02-23 5 views
1

Недавно я прочитал замечательный вопрос о кадрах &. Здесь есть свойство вида - UIView frame, bounds and center. Я попытался поэкспериментировать с этим еще немного с автозапуском, и теперь я нахожусь в очень противоречивом сценарии. Пожалуйста, будьте терпеливы, так как это может занять немного времени.Рамки против ограничений и ограничений автоопределения?

выделю их один за другим & поэтому, пожалуйста, помогите мне получить за все это -

Что у меня есть? -

Вид иерархия с ограничениями следующим образом - (Проектирование было сделано по умолчанию размер в ViewController 600 * 600)

enter image description here

enter image description here

Я попытался распечатать рамки и ограничения этих изображений -

contentView

print(contentView.frame)// o/p - (0.0, 64.0, 600.0, 536.0) 
    print(contentView.bounds)//o/p- (0.0, 0.0, 600.0, 536.0) 

Q) ** а) ** Почему размер кадра показывает 600 * 536 в зависимости от того экрана я могу запустить его. например. Он печатает то же самое, если я запускаю его на экране 4s или на экране iPad?

** b) ** И всегда это зависит от размера моего VC в моей раскадровке !!. например. Если я создаю экран в 3,5-дюймовом VC, размер кадра станет 320.0 * 416.0.

** c) ** Поскольку он прикреплен ко всем сторонам обзора, он должен быть таким же, как и размер вида, а также он всегда остается прикрепленным к краям. Так почему же это не то же размера self.view.frame.width*self.view.frame.height

Sideview

print(sideView.frame)//o/p - (520.0, 86.0, 80.0, 128.0) 
    print(sideView.bounds)//o/p - (0,0, 80.0, 128.0) 

Q) Если я разрабатываю пользовательские UIView программно, как

let TestView = UIView(frame: CGRectMake(520.0, 86.0, 80.0, 128.0))//Mark:its frame is exactly same as sideView.frame 
     TestView.backgroundColor = UIColor.redColor() 
     self.contentView.addSubview(TestView) 

Так вот Sideview (подтаблицы contentView) следует заменить TestView, но не & экран o/p будет таким же, как в предыдущем случае. Зачем?

Спасибо.

ответ

3

Q) ** a) ** Почему размер рамы составляет 600 * 536 в зависимости от того, какой экран я могу выполнить . например. Он печатает то же самое, если я запускаю его на экране 4s или в экране iPad?

** b) ** И всегда это зависит от размера моего VC в моей раскадровке !!. например. Если я проектирую экран в 3,5-дюймовом VC, размер кадра становится 320.0 * 416.0.

Это будет зависеть от когда вы проверить размер представления содержимого (или основной вид контроллера представления). Если вы хотите проверить размер в методе viewDidLoad(), вы увидите, что это размер, который вы видите в Interface Builder. Это размер, который был сохранен в раскадровке, и он еще не был изменен для устройства.

Однако, если вы проверите размер в методе viewDidAppear(), размер должен соответствовать размеру экрана устройства.

Если вы действительно хотите связать фреймы напрямую, вы, вероятно, захотите сделать это в viewDidLayoutSubviews(). На этом этапе изображение будет изменено для устройства, и вы сможете получить обновленные измерения и изменить кадры. Хотя обычно лучше всего просто установить ограничения правильно, а также позволить автоматическому оформлению внести изменения.

+0

Спасибо за ваш ответ. Можете ли вы ответить на мой вопрос о sideView во второй половине? –

+0

Опять же, это в первую очередь зависит от того, когда вы пытаетесь сопоставить новый вид с положением бокового обзора. Но тогда они по-прежнему будут двигаться по-другому, так как в вашем боковом представлении есть ограничения автоматической компоновки, но вы не добавили их в новое представление. –

Смежные вопросы