В этом вопросе обсуждается, как создать промежутки между представлениями в UIScrollView.Согласованный метод заключается в увеличении ширины кадра UIScrollView для создания промежутков между представлениями, которые будут прокручиваться в прошлом.Однако, когда представление прокрутки является подпредставлением UINavigationController, возникает проблема.UINavigationController изменяет фрейм UIScrollView после того, как он был установлен в -viewDidLoad
.Предложенное решение состоит в том, чтобы изменить размер фрейма в -viewDidAppear
, после чего UINavigationController закончил что-то менять, и изменения останутся.
- (void)viewDidAppear:(BOOL)animated {
CGRect frame = self.view.frame;
frame.size.width += 20; // This gives a 20px gap width
self.view.frame = frame;
}
Я использовал это в своем приложении, и это былоработает нормально, но у меня возникают проблемы, когда приложение отправляется в фоновый режим, а затем снова извлекается.Кажется, что UINavigationController снова меняет фрейм, сбрасывая его на ширину по умолчанию, но на этот раз -viewDidAppear
не вызывается и поэтому изменение никогда не производится.Я попытался зарегистрироваться для UIApplicationWillEnterForegroundNotification
и UIApplicationDidBecomeActiveNotification
, но, похоже, что оба они происходят до того, как UINavigationController что-то изменит, поэтому изменение фрейма в этот момент не имеет никакого эффекта.
В какой момент я должен попытаться изменитьразмер кадра такой, что он будет придерживаться, или я могу как-то помешать UINavigationController изменить кадр в первую очередь?
РЕДАКТИРОВАТЬ:
Итак, я подклассифицировал UIScrollView и обнаружил, что метод с именем [UIViewControllerWrapperView setFrame:]
вызывается, что в свою очередь вызывает метод -setFrame:
моего подкласса для установки размера кадра.Я не знаю, что такое UIViewControllerWrapperView
или делает, и я не уверен, что можно будет подключиться после того, как он выполнит свою задачу и правильно установит размер кадра.Я буду продолжать расследование.