АвтоматическиAdjustsScrollViewInsets не работает
Я создал чрезвычайно простое демонстрационное приложение для тестирования функциональности automaticallyAdjustsScrollViewInsets
, но последняя ячейка таблицыView покрыта моей панелью вкладок.
Мой код AppDelegate:
UITabBarController *tabControl = [[UITabBarController alloc] init];
tabControl.tabBar.translucent = YES;
testViewController *test = [[testViewController alloc] init];
[tabControl setViewControllers:@[test]];
[self.window setRootViewController:tabControl];
Мой testViewController (подкласс UITableViewController) Код:
- (void)viewDidLoad
{
[super viewDidLoad];
self.automaticallyAdjustsScrollViewInsets = YES;
self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
self.tableView.dataSource = self;
self.tableView.scrollIndicatorInsets = self.tableView.contentInset;
//[self.view addSubview:self.tableView];
// Do any additional setup after loading the view.
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 20;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@""];
cell.textLabel.text = @"test";
return cell;
}
Является ли это ошибкой в iOS 7? Если нет, что я сделал не так?
Ответы
Ответ 1
Я думаю, что automaticallyAdjustsScrollViewInsets
работает только тогда, когда ваши контроллеры view
являются UIScrollView
(табличный вид - один).
Кажется, что проблема заключается в том, что ваш контроллер view
является регулярным UIView
, а ваш UITableView
является только подвью, поэтому вам придется либо:
-
Сделать таблицу вид "root".
-
Отрегулируйте вставки вручную:
UIEdgeInsets insets = UIEdgeInsetsMake(controller.topLayoutGuide.length,
0.0,
controller.bottomLayoutGuide.length,
0.0);
scrollView.contentInset = insets;
Edit:
Кажется, что SDK способен настраивать некоторые виды прокрутки, несмотря на то, что они не являются корневым представлением контроллера.
Пока он работает с UIScrollView
и UIWebView
scrollView
, когда они являются подвью в индексе 0
.
В любом случае это может измениться в будущих выпусках iOS, так что вы сами сделаете более безопасные корректирующие вставки.
Ответ 2
Контроллер вашего представления должен быть непосредственно в стеке UINavigaitonController для automaticallyAdjustsScrollViewInsets
для работы (т.е. не для контроллера детского представления)
Если это контроллер дочернего представления другого контроллера представлений, который находится в стеке навигации, вы можете вместо этого установить automaticallyAdjustsScrollViewInsets = NO
в родительском элементе. В качестве альтернативы вы можете сделать это:
self.parentViewController.automaticallyAdjustsScrollViewInsets = NO;
Ответ 3
У меня была одна и та же проблема - представление таблицы с нежелательным верхним дополнением.
Все ответы говорят исправить, установив automaticallyAdjustsScrollViewInsets = NO
, но это не устраняет отступы для меня.
Подобно другим ответам здесь, эти направления нужно немного подправить, если вы используете нестандартную иерархию представлений.
У меня был UIViewController со встроенным UITableViewController. Он не работал над установкой automaticallyAdjustsScrollViewInsets
в Table View Controller.
Вместо этого я установил automaticallyAdjustsScrollViewInsets = NO
в родительский UIViewController, который встраивал мой Table View Controller. Это успешно устранило отступы в представлении таблицы.
Ответ 4
Я знаю, что это сообщение немного устарело, но я просто решил эту проблему с iOS 11 и быстрым 4, моя текущая проблема заключалась в том, что у iOS11 есть новое свойство для проверки вложений, когда ScrollView существует, это contentInsetAdjustmentBehavior
, который является свойством ScrollView, а свойство по умолчанию - automatic
, поэтому мой код:
if #available(iOS 11, *) {
myScroll.contentInsetAdjustmentBehavior = .never
} else {
self.automaticallyAdjustsScrollViewInsets = NO;
}
Я надеюсь, что это также решит ваши проблемы...
Ответ 5
У меня есть эта иерархия:
-
настраиваемый контроллер навигации содержит настраиваемый элемент управления tabbarcontroller
-
Пользовательский элемент управления tabbarcontroller содержит несколько контроллеров
-
эти контроллеры содержат subviews, и один из них содержит подкласс uiscrollview.
Мне пришлось установить autoAdjustsScrollViewInsets в NO
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
self.automaticallyAdjustsScrollViewInsets = NO;
в настраиваемом tabbarcontroller. Другие контроллеры в иерархии не влияют на поведение представления вложенных прокруток.
Ответ 6
self.textView.contentInset = UIEdgeInsetsMake(1.0,0.0,0,0.0);
[self setEdgesForExtendedLayout:UIRectEdgeNone];