2015-08-28 3 views
1

сообщество. Есть странная вещь для изменения размера UIView, которую я не могу понять.UIVIew изменение размера в раскадровке и разница в NIB

Предположим, у нас есть простой одноразовый приложение с Main.storyboard. В раскадровке я создаю RedView. Он имеет размер по умолчанию 600x600. И все параметры установлены по умолчанию. Я ничего не меняю.

Теперь, я создаю BlueView.xib с BlueView, и он имеет тот же размер и те же параметры, что и RedView. Также я создаю класс BlueViewControler и устанавливаю его как владельца в BlueView.xib. BlueViewControler пуст.

RedView включает Blueview как ребенок, как это:

@implementation RedViewController 
{ 
    BlueViewController *_blueViewController; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    _blueViewController = [[BlueViewController alloc] initWithNibName:@"BlueView" bundle:nil]; 
    [self.view addSubview:_blueViewController.view]; 
} 

@end 

И теперь, когда я запускающего приложение на iPhone 5 Simulator, RedView становится 320 * 568, и синий вид становится 600 * 600.

2015-08-28 13:32:17.937 TestViewSize[3087:77218] RedView frame = {{0, 0}, {320, 568}} 
2015-08-28 13:32:17.938 TestViewSize[3087:77218] BlueView frame = {{0, 0}, {600, 600}} 

На экране они также выглядят по-разному. Так что мой вопрос:

  1. Почему RedView, созданный в раскадровке, autoresizes? Я могу понять, почему Blue view 600 * 600, но почему Red настраивается на размер экрана? Кто говорит, чтобы это сделать?

  2. В чем разница между созданием вида в XIB и в раскадровке , связанной с размерами представлений, а не с чем-либо еще. Почему раскадровка изменяет размер своего вида, а .XIB - нет?

Мой проект был создан в Xcode 6, цель 8,0, использование Autolayout и Size Classes включены.

+0

и есть переопределить любой из методов инициализации 'BlueViewController'and установить кадр, когда и create with nib – Mukesh

+0

@muku, я знаю, как я могу справиться с этим, меня интересует ** почему ** это происходит? – Akira

ответ

0

Я думаю, что это becaus по размеру классов Согласно яблоку docs

Людей обычно хотят использовать свои любимые приложения на все свои устройства и в любой ориентации. В iOS 8 и более поздних версиях вы используете классы размеров и автоматический макет, чтобы помочь вам выполнить это ожидание, указав, как макет экранов, контроллеров представлений и представлений должен адаптироваться при изменении среды отображения.

Итак, когда вы проверить его на iPhone55 ваш redView который раскадровка имеет wAnyhAny изменяет себя в то время как синий вид, который вы добавляете в подвид remians же. Теперь вы не использовали никакой constarint, чтобы определить его ширина или высота си она по-прежнему 600x600

EDIT This может быть лучше

+0

Но у моего XIB-файла также есть ** wAnyhAny **, так почему же он не работает так же? Кроме того, невозможно добавить ограничения для представления верхнего уровня XIB (меню контактов просто пуст). И я ** не добавлял никаких ограничений в раскадровку. Таким образом, эти взгляды находятся в одной и той же ситуации, за исключением того, что они создаются по-разному. – Akira

+0

@Akira Вы добавляете xib в качестве подсмотра друг друга. Если вы хотите, чтобы они были в одном и том же состоянии, вы должны попробовать раскадровку с двумя VC – Misha

+0

. Я могу добавить xib-просмотр непосредственно в keyWindow, и эффект будет таким же: xib-view все еще остается 600 * 600. Мне не нужно, чтобы они были в одном и том же состоянии, мне нужно знать, почему раскадровка изменяет его размер, а xib - нет. – Akira

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