Mam dziwne problemy z metodą topLayoutGuide
, które muszę użyć w sytuacji, gdy setAutomaticallyAdjustsScrollViewInsets:
nie działa. Aby zawęzić przyczynę problemu, utworzyłem następujący minimalny przykład, który po prostu konfiguruje podstawowy widok tabeli do testowania:Wywołanie topLayoutGuide przerywa przewijanie w ogóle?
- Skonfiguruj nową aplikację pojedynczego widoku iOS w Xcode.
Wklej następujący kod w realizacji ViewController.m za:
@implementation ViewController - (void)loadView { [self setTableView:[[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]]; } - (void)viewDidLoad { [super viewDidLoad]; [self setAutomaticallyAdjustsScrollViewInsets:NO]; // [*] } - (void)viewDidLayoutSubviews { UITableView *tableView = [self tableView]; UIEdgeInsets insets = [tableView contentInset]; // insets.top = [[self topLayoutGuide] length]; // [1] // insets.top = 100; // [2] [tableView setContentInset:insets]; [tableView setScrollIndicatorInsets:insets]; } #pragma mark - Table view data source - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 100; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } [[cell textLabel] setText:[NSString stringWithFormat:@"%d", [indexPath row]]]; return cell; } @end
Kwestie, które mam są takie:
Gdybym odkomentuj linię oznaczoną
[1]
, poprawna wstawka jest stosowana, ale przewijanie widoku tabeli już nie działa. Kiedy próbuję przewinąć, stół po prostu odskakuje z powrotem do początkowej pozycji przewijania po tym, jak puściłem palec. To zachowanie jest również wywoływane przez zwykłe wywołanie[self topLayoutGuide]
, bez przypisywania wyniku do niczego.Gdybym odkomentuj linię
[2]
zamiast z[1]
, przewijanie utworów. Stosuje się również wstawkę o wartości 100 pt. Ale teraz początkowa pozycja przewijania jest automatycznie dostosowywana, tak aby zawartość przewyższała pasek stanu.
([*]
: rzeczywiście wydaje się to tylko zrobić wszystko, w połączeniu z kontrolerem nawigacyjnym zawierającym I nie wydaje się, aby dokonać zmian w tym przykładzie, ale chcę, aby wyłączyć wszystkie automatyczne zachowanie tylko aby się upewnić. .)
Czy jest coś oczywistego, że robię źle? Naprawdę jestem tu zagubiona.
Właśnie się dowiedziałem, że wywołanie '[self topLayoutGuide]' powoduje 'własność contentSize' widoku tabeli, aby zmienić od popraw wartość do '{0, 0}'. Nie mam pojęcia, dlaczego tak się dzieje, choć ... – tajmahal
Prawdopodobnie błąd, również ten. – cschwarz
To samo tutaj. To jest bardzo frustrujące. Czuje się jak dobry stary iOS 3.0 razy. – Nicky