IOS дает неожиданное значение для ширины на версии IOS7 и IOS8
Привет, я разрабатываю приложение IOS. В моем приложении я проверяю значения ширины X и Y высоты моего обзора. В IB я использую автоматическое расположение с правым левым верхним и ограничением высоты. Я не определяю ограничения ширины. Внутри viewDidLoad я проверяю значения для ширины высотой X и Y. Для значения ширины это дает неожиданное значение на IOS8, но на IOS7 это дает правильное значение. для IOS7 это дает мне ширину 320, которая ожидается, а для IOS8 - 600, которая не ожидается.
NSLog(@"%f %f %f %f ", _sampleView.frame.size.height, _sampleView.frame.size.width, _sampleView.frame.origin.x,
_sampleView.frame.origin.y);
То, что я пытаюсь сделать, я пытаюсь добавить еще одно представление к ранее представленному представлению программно. Я сделал это следующим образом:
UIView *subView = [[UIView alloc] init];
subView.frame = _sampleView.frame;
[self.view addSubview:subView];
Выше хорошо работает на IOS7, но не на IOS8.
Как решить эту проблему. Я делаю что-то не так? Нужна помощь. Спасибо.
1 ответ
В Xcode 6 раскадровки начинаются с размера экрана 600x600, то есть для viewDidLoad, так как представления еще не были изменены по размеру экрана, вы все равно получаете этот размер.
Если вы хотите узнать размер элементов на экране, вам нужно посмотреть на них после того, как они были правильно размещены и изменены на экране. Вы можете проверить это на viewDidLayoutSubviews вашего контроллера представления.
-(void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
NSLog(@"%f %f %f %f ", _sampleView.frame.size.height, _sampleView.frame.size.width, _sampleView.frame.origin.x, _sampleView.frame.origin.y);
}
Однако вы не должны добавлять какие-либо подпредставления в этот метод, так как он будет срабатывать снова при размещении только что добавленного представления, вызывая бесконечный цикл. Используйте его только для определения правильного размера ваших просмотров.
Если вы действительно хотите добавить представление для этого метода, используйте логическое значение элемента управления или что-то подобное, чтобы убедиться, что вы делаете это только один раз.
Если вы хотите добавить представление более корректным способом, то вы можете программно добавить некоторые ограничения автопоставки к этому новому добавляемому представлению, чтобы убедиться, что оно ведет себя как исходное.
Обратитесь к этой статье, чтобы узнать, как использовать autolayout программно: http://www.thinkandbuild.it/learn-to-love-auto-layout-programmatically/