У меня возникают странные проблемы с методом topLayoutGuide
, который я должен использовать в ситуации, когда setAutomaticallyAdjustsScrollViewInsets:
не работает. Чтобы сузить причину проблемы, я создал следующий минимальный пример, который просто устанавливает базовый вид таблицы для тестирования:
- Настройте новое приложение iOS Single View в Xcode.
-
Вставьте следующий код в реализацию ViewController.m:
@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
Я имею следующие проблемы:
-
Если я раскомментирую строку, помеченную
[1]
, применяется правильная вставка, но прокрутка представления таблицы больше не работает. Когда я пытаюсь прокручивать, таблица просто возвращается к исходной позиции прокрутки после того, как я отпустил палец. Это поведение также вызвано простым вызовом[self topLayoutGuide]
, не присваивая результат чему-либо. -
Если я раскомментирую строку
[2]
вместо[1]
, прокрутка работает. Также применяется вставка 100 pt. Но теперь начальная позиция прокрутки автоматически настраивается так, чтобы содержимое перекрывало строку состояния.
([*]
: Это действительно похоже на что-то в сочетании с содержащим навигационный контроллер. В этом примере я, похоже, не делаю никакого различия, но я хочу отключить любое автоматическое поведение, чтобы быть уверенным.)
Есть ли что-то очевидное, что я делаю неправильно? Я действительно в растерянности.