2014-01-15 26 views
5

Ich habe ein Problem mit contentInset funktioniert nicht für eine UIScrollView mit einem Tastatur-Popup zu arbeiten. Es funktioniert Art von funktioniert: aus irgendeinem Grund brauche ich große Zahlen (vielleicht über die Höhe der Ansicht?) Für es alles zu tun, trotz aller Dokumentation von contentInset zeigt kleine Zahlen wie 40.0 (z. B. für einen Balken) oder die Tastatur Höhe.UIScrollView contentInset funktioniert nicht

habe ich reproduziert das Problem auf eine völlig neue Anwendung durch die folgenden Schritte:

  1. neue Single Ansicht Anwendung erstellen Xcode neues Projekt mit
  2. On Storyboard, ziehen Sie in einem Scrollview, Großansicht Größe Füllung
  3. auf Storyboard, ziehen in eine Schaltfläche am unteren Rand des Bildschirms (innerhalb des Scroll)
  4. Verknüpfen Sie die Scrollview auf eine neue Eigenschaft in der Viewcontroller
  5. Link-Hintern

    @interface ViewController() 
    @property (weak, nonatomic) IBOutlet UIScrollView *scrollView; 
    @end 
    
    @implementation ViewController 
    - (IBAction)button:(id)sender { 
        self.scrollView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 600, 0.0); 
    } 
    @end 
    

    Was bin ich fehle/warum brauche ich eine große Anzahl: auf ein Verfahren im Hier ist der Code für den Viewcontroller Viewcontroller

  6. den gedrückte Methode des Taste

die contentInset gesetzt ?

Antwort

12

Überprüfen Sie, ob self.scrollView.contentSize richtig eingestellt ist. Wenn contentSize.height 0 ist (wie es bei der Ausführung Ihrer Schritte der Fall ist), ist ein großer Einschub erforderlich.

Versuchen Sie, [self.scrollView setContentSize: CGSizeMake(320, 568)]; der Button-Methode hinzuzufügen, und Sie werden feststellen, dass sich Ihr Inset jetzt wie erwartet verhält.

+1

Danke. Ich hatte diese Eigenschaft schon einmal angeschaut, aber ich habe nicht bemerkt, dass sie nach dem Setzen von contentInset auf '{0,0}' zurückgesetzt wird. Ich musste 'contentSize' * nach * dem Inset setzen. – Dan2552

+0

@Matt Ich arbeite nicht mit 'UIScrollView' viel, aber das ist interessant. Warum wird 'contentSize' nach dem Setzen von 'contentInset' zurückgesetzt? Bedeutet das, der logische Schritt wäre, zuerst contentInset und dann contentSize zu setzen? – Unheilig

+0

@ Unheilig Einstellung * 'contentInset' * sollte nicht zurückgesetzt werden *' contentSize' *. – Matt

1

Matt hat Recht, es hat mit self.scrollView.contentSize zu tun. Ich benutze Auto Layout und der fehlende Link für mich war explizit setzen der scrollView contentSize Eigenschaft, um die gleiche wie meine contentView Rahmengröße (contentView ist die Ansicht in meinem scrollView, die alle anderen Ansichten enthält). Mein contentView ist so codiert, dass seine Größe auf den Elementen basiert, die ich eingefügt habe. Sie "pushen" auf contentView aus und steuern daher die Größe von contentView dynamisch an. Es ist als "letzter Schritt" innerhalb viewDidLayoutSubviews, dass ich diese dynamische Größe in scrollView.contentSize verknüpfen. Jetzt funktioniert es wie erwartet.

// Auto Layout Solution 
- (void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 
    self.scrollView.contentSize = self.contentView.frame.size; 
} 
1

In meinem Fall habe ich einfach vergessen, die Scroll im Interface Builder zu verbinden ...

Verwandte Themen