Я искал StackOverflow (и Интернет) для решения этой проблемы. Вопрос задавался много раз, но, как вы заметили, так и не получил достаточного ответа. Многие решения дают приемлемое решение, если неважно, свернется ли, например, нижняя панель инструментов.
Другие предоставили решение, использующее UIView
animations / CoreAnimation вместо UIModalTransitionStylePartialCurl
в качестве стиля модального перехода; в худшем случае это решение не разрешено в App Store, и в лучшем случае это не совсем тот же эффект, который можно получить от UIModalTransitionStylePartialCurl
(например, форма завитка отличается).
Ни одно из этих решений не дало ответа, который имитирует решение Apple в приложении "Карты" (т. Е. С использованием UIModalTransitionStylePartialCurl
, но с не скрученным UIToolbar
в нижней части экрана).
Я продолжу эту традицию неполных ответов, поскольку вы спрашиваете о UITabBarController
, и мое решение конкретно не касается этого случая. Это, однако, решает проблему, с которой я столкнулся: получить завиток на полстраницы с не скрученной панелью инструментов внизу.
Должен быть более элегантный способ сделать это, но так я справился.
rootViewController
моего AppDelegate
- это подкласс UIViewController
, который я назову TAContainerViewController
. TAContainerViewController
управляет а) фактическим содержимым экрана («материал для скручивания»), TAContentViewController
и б) содержимым «за» TAContentViewController
(например, настройками), которое я назову TAUnderCurlViewController
.
Мой экземпляр TAContainerViewController
имел свойства для TAContentViewController
и TAUnderCurlViewController
. UIView
, который был моим контентом, был подпредставлением свойства TAContentViewController
view
; аналогично, то, что пользователь видит под завитком, это свойство view
TAUnderCurlViewController
.
В методе init
из TAContainerViewController
я выполняю следующие действия:
_underCurlVC.modalTransitionStyle = UIModalTransitionStylePartialCurl;
И чтобы свернуть содержимое для отображения под страницей, я настроил действие, которое вызывает этот код:
[self.contentVC presentModalViewController:self.underCurlVC animated:YES];`
, где self
- это TAContainerViewController
, contentVC
- это экземпляр TAContentViewController
, а underCurlVC
- это экземпляр TAUnderCurlViewController
.
Чтобы отклонить представление, просто [self.contentVC dismissModalViewControllerAnimated:YES];
.
Кажется, что некоторая странность возникает с рамкой contentVC
, когда модальный вид отклоняется, поэтому я вручную сбрасываю кадр, когда модальный вид отклоняется.
Я опубликовал пример проекта с более подробной информацией о Github . Надеюсь, кто-то может взять это и превратить в более элегантное решение или расширить его для работы с UINavigationController
или UITabBarController
. Я думаю, что хитрость заключается в том, чтобы вытащить контроллеры вида из четко определенных отношений в подклассах Какао, поэтому, возможно, подклассы этих специализированных контроллеров вида сделают это.