- [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 просто не предназначен для отображения контента меньше своего размера. Мой вариант использования состоит в том, что у меня может быть представление содержимого, которое шире, чем представление прокрутки, но короче по высоте, и мне нужно иметь возможность прокручивать правый или левый конец этого представления содержимого программным способом.

Ответы на вопрос(2)

Ваш ответ на вопрос