- [UIScrollView zoomToRect: animated:] странное поведение, когда contentSize <bounds.size
Может ли кто-нибудь точно описать поведение-[UIScrollView zoomToRect:animated:]
? Этот метод действительно кажется сложным, но документация Apple очень скудна.
Я получаю непредсказуемое поведение этого метода, когда размер содержимого меньше, чем размер представления прокрутки по ширине и / или высоте. В некоторых случаях этот метод приводит к тому, что представление прокрутки имеет отрицательное смещение содержимого, когда оно должно быть 0. Проходя немного другие строки, он оставляет смещение содержимого равным 0, как я и ожидал.
Чтобы продемонстрировать это странное поведение, я создал пример проекта свид прокрутки размера (200, 200) содержащийпросмотр содержимого размера (100, 100), Я ожидаю, чтомасштабирование до прямоугольного ((0, 0), (200, 200)) в представлении содержимого следует оставить содержимое в верхнем левом углу (т.е.ничего не должно случиться). Однако это фактически приводит к прокрутке содержимого до правого нижнего угла границ представления прокрутки (смещение содержимого (-100, -100)). Почему это происходит?
Вот код в моем примере проекта:
@implementation RootViewController
- (void)loadView {
self.view = [[UIView alloc] init];
self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
self.scrollView.delegate = self;
self.scrollView.backgroundColor = [UIColor whiteColor];
self.scrollView.minimumZoomScale = .5;
self.scrollView.maximumZoomScale = 4;
self.contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
self.contentView.backgroundColor = [UIColor redColor];
[self.contentView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap)]];
[self.scrollView addSubview:self.contentView];
self.scrollView.contentSize = self.contentView.frame.size;
[self.view addSubview:self.scrollView];
}
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return self.contentView;
}
- (void)handleTap {
[self.scrollView zoomToRect:CGRectMake(0, 0, 200, 200) animated:YES]; // Try changing to 199, 199 to get completely different behavior
}
@end
Спасибо за любые идеи! Прямо сейчас я предполагаюUIScrollView
просто не предназначен для отображения контента меньше своего размера. Мой вариант использования состоит в том, что у меня может быть представление содержимого, которое шире, чем представление прокрутки, но короче по высоте, и мне нужно иметь возможность прокручивать правый или левый конец этого представления содержимого программным способом.