UIScrollView и UINavigationController взаимодействий - PullRequest
3 голосов
/ 23 октября 2011

Я только что заметил, что если я добавлю UIScrollView в качестве корневого представления UIViewController:

- (void)loadView
{
    self.view = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
}

, я получу много поведения бесплатно: scrollView автоматически устанавливает contentInset и scrollIndicatorInsetsесли строка состояния, панель навигации или панель инструментов присутствуют и являются полупрозрачными и обновляет свойства, если изменяются какие-либо макеты навигации:

[self.navigationController setNavigationBarHidden:YES animated:YES];

К сожалению, представление прокрутки также автоматически меняет contentOffset при изменении contentsInset, поэтому контент исчезает, когда панель навигации исчезает, и вниз, когда появляется панель навигации.

Мне нравится много этого свободного поведения, но я бы хотел, чтобы мой контент оставался неподвижным, когда появляется панель навигации.и идет, и я не могу найти, где избежать изменения в contentOffset.

Редактировать:

После некоторых трассировок стека, я обнаружил метод, которыйвызывается каждый раз, когда смещение автоматически корректируется: [UIScrollView(Static) _adjustContentOffsetIfNecessary];но поскольку я не могу найти документацию по этому методу, я в растерянности.

Ответы [ 3 ]

3 голосов
/ 16 февраля 2014

Хорошо, я нашел это.UIViewController имеет свойство под названием «automaticAdjustsScrollViewInsets», которое изменяет contentOffset при отображении / скрытии навигационной панели.Установите значение no, чтобы предотвратить изменения в UIScrollView.

Источник (и решение ios6): https://stackoverflow.com/a/20325593/936957

0 голосов
/ 24 апреля 2018

Мое решение добавить:

self.automaticallyAdjustsScrollViewInsets = NO;    

в viewDidload.

и вместо [UINavigationController setNavigationBarHidden:animated:] я использую:

self.navigationController.navigationBar.hidden = YES;//or NO   

, чтобы скрыть панель навигации и избежать изменения содержимого.

И не забудьте установить скрытое состояние обратно в viewDidDisappear или в другое подходящее место:

self.navigationController.navigationBar.hidden = NO
0 голосов
/ 23 октября 2011

Вы пытались установить вставки содержимого при скрытии / отображении панели навигации?

Как при скрытии:

[self.navigationController setNavigationBarHidden:YES animated:YES];
self.view.contentInset = UIEdgeInsetsMake(self.navigationController.navigationBar.bounds.size.height, 0, 0, 0);

и при отображении:

[self.navigationController setNavigationBarHidden:NO animated:YES];
self.view.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);

AFAIK contentInset не должно изменяться системой, это изменит макет вашего приложения ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...