- [UIScrollView zoomToRect: animated:] seltsames Verhalten, wenn contentSize <bounds.size

Kann jemand das Verhalten von genau beschreiben?-[UIScrollView zoomToRect:animated:] ? Diese Methode scheint wirklich komplizierte Dinge zu tun, aber die Dokumentation von Apple ist sehr spärlich.

Ich bekomme ein unvorhersehbares Verhalten dieser Methode, wenn die Inhaltsgröße in Breite und / oder Höhe kleiner als die Größe der Bildlaufansicht ist. In einigen Fällen führt diese Methode dazu, dass die Bildlaufansicht einen negativen Versatz für den Inhalt aufweist, wenn der Wert 0 sein sollte. Wenn geringfügig andere Rechtecke übergeben werden, bleibt der Versatz für den Inhalt wie erwartet bei 0.

Um dieses seltsame Verhalten zu demonstrieren, habe ich ein Beispielprojekt mit einemScroll-Ansicht der Größe (200, 200) mit aInhaltsansicht der Größe (100, 100). Das würde ich erwartenZoomen nach rechts ((0, 0), (200, 200)) der Inhaltsansicht sollte der Inhalt oben links belassen werden (d. h.nichts sollte passieren). Tatsächlich wird der Inhalt jedoch an den Grenzen der Bildlaufansicht nach rechts unten verschoben (Inhaltsoffset (-100, -100)). Warum passiert das?

Hier ist der Code in meinem Beispielprojekt:

@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

Vielen Dank für eventuelle Einblicke! Im Moment rate ichUIScrollView ist nur nicht dafür ausgelegt, Inhalte anzuzeigen, die kleiner als die eigene Größe sind. Mein Anwendungsfall ist, dass ich möglicherweise eine Inhaltsansicht habe, die breiter als die Bildlaufansicht, aber kürzer ist, und ich muss in der Lage sein, programmgesteuert zum rechten oder linken Ende dieser Inhaltsansicht zu scrollen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage