У меня очень простой пример UIScrollView
, который просто не делает то, что он должен. Не уверен, что это ошибка с API или ошибка в моем коде.UIScrollView не получает новый размер при изменении ориентации
В принципе, у меня есть UIViewController
с UIScrollView
, так как он находится на виду. Когда я добавляю его в UIWindow
и меняю ориентацию iPad, я выхожу из формата UIScrollView
s, который указан неверно (?).
Вот мой UIViewController
реализация:
@implementation CustomViewController
- (void)loadView {
scrollView = [[[UIScrollView alloc] init] autorelease];
scrollView.delegate = self;
scrollView.backgroundColor = [UIColor redColor];
self.view = scrollView;
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
CGSize rect = scrollView.frame.size;
NSLog(@"will rotate w%f h%f", rect.width, rect.height);
}
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
CGSize rect = scrollView.frame.size;
NSLog(@"will animate rotation w%f h%f", rect.width, rect.height);
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
CGSize rect = scrollView.frame.size;
NSLog(@"did rotate w%f h%f", rect.width, rect.height);
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
@end
Когда я запускаю приведенный выше код, я вижу следующие записи в моей консоли:
2010-07-11 11:03:05.214 Untitled2[6682:207] will rotate w768.000000 h1004.000000
2010-07-11 11:03:05.214 Untitled2[6682:207] will animate rotation w748.000000 h1024.000000
2010-07-11 11:03:05.619 Untitled2[6682:207] did rotate w748.000000 h1024.000000
2010-07-11 11:03:07.951 Untitled2[6682:207] will rotate w748.000000 h1024.000000
2010-07-11 11:03:07.958 Untitled2[6682:207] will animate rotation w768.000000 h1004.000000
2010-07-11 11:03:08.367 Untitled2[6682:207] did rotate w768.000000 h1004.000000
Как вы можете видеть, изменения ориентации действительно изменить размер UIScrollView
, но только для того, чтобы разрешить новую строку состояния. Я бы ожидал, что ширина и высота резко изменится, так как размер UIScrollView
шире, чем высокий, и наоборот.
Есть ли способ получить UIScrollView
, чтобы сообщить о его реальном размере?
Это не работает. Я перехватываю изменения, затем я использую NSStringFromRect (self.bounds), и он печатает границы «непосредственно перед изменением». Но текущая начальная ориентация возвращает правильное значение. По крайней мере, один из них последовательно возвращает то же самое, но человек ... эта проблема не должна занять много времени. Из документов, в то время как границы являются неотрицательными, не всегда ли это 0,0, то же, что и ширина рамки, такая же, как высота кадра? –
Порог границ всегда равен 0,0 по умолчанию, если вы не меняете часть просмотра, которую хотите отобразить. Thats только половина истории, CGRect содержит член размера тоже, и это то, что обычно изменяется при изменении размера, переориентации представления. Функции «will» выше дают вам «before values», функции «did» дают вам «after values». –