В моем приложении я хотел бы сделать что-то похожее на то, что делает Spotify в своем приложении. 
Они добавляют UIView (красная полоса) над всеми другими видами в приложении. Я попытался сделать это, добавив следующий код в свой RootSplitViewController, но это не сработало.
- (void)viewWillAppear:(BOOL)animated {
[self.view addSubview:[[BannerView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44.0f)]];
for (int i = 0; i < [self.viewControllers count]; i++) {
UIViewController *vc = [self.viewControllers objectAtIndex:i];
vc.view.frame = CGRectMake(vc.view.frame.origin.x, 44, vc.view.frame.size.width, vc.view.frame.size.height-44);
}
}
Это просто добавило красный вид поверх моего UINavigationBar, но не «толкало его вниз». Есть идеи, как подойти к этому?
Возможный дубликат Посмотреть поверх UITabBar
На самом деле это не так. Этот парень хочет показать вид на своем UITabBar, где, как я хотел бы, показать полосу, которая толкает "приложение" вниз.
Затем поясните это в своем вопросе. Вы не упомянули ранее, что вам нужна «полоса, которая толкает приложение вниз». И объясните, пожалуйста, какая часть не работает. Это поможет получить больше полезных ответов.
@ user4992124, у тебя все заработало? Я хочу сделать то же самое с контроллером панели вкладок, нажимая на 20 пунктов на всех возможных экранах. Спасибо





Вы можете добавить вид на уровне окна.
let appDelegate = UIApplication.shared.delegate as! AppDelegate
if let win = appDelegate.window {
win.addSubview(<#Your View#>)
}
Это добавит представление как подпредставление на UIWindow.
Цель C
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
[[appDelegate window] addSubView:<#Your View#>];
Вы можете добавить свое представление как подвид внутри UIApplication.shared.keyWindow.
Например, в вашем случае:
В Swift 4
let window = UIApplication.shared.keyWindow!
let fullScreenView = UIView(frame: CGRect(x: window.frame.origin.x, y: window.frame.origin.y, width: window.frame.width, height: window.frame.height))
let yourRedView = UIView(frame: CGRect(x: 0, y: 0, width: fullScreenView.frame.width, height: 100))
fullScreenView.backgroundColor = UIColor.gray
yourRedView.backgroundColor = UIColor.red
fullScreenView.addSubview(yourRedView)
window.addSubview(fullScreenView)
В Objective-C
UIWindow* window = [UIApplication sharedApplication].keyWindow;
UIView* fullScreenView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, window.frame.size.width, window.frame.size.height)];
UIView* yourRedView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, window.frame.size.width, 100)];
[yourRedView setBackgroundColor:[UIColor redColor]];
[fullScreenView setBackgroundColor:[UIColor grayColor]];
[fullScreenView addSubview:yourRedView];
[window addSubview:fullScreenView];
Не могли бы вы добавить его и в ObjC?
да, конечно @ user4992124
Я бы сделал containerViewController, который находится в корне вашей иерархии. У него есть два дочерних контроллера представления: ваш текущий rootVC и VC, который содержит красное представление. Теперь каждый раз, когда отображается ваше красное представление, ваш containerVC может изменять границы контроллеров дочерних представлений и отображать их оба на экране, даже с некоторой анимацией.
См. Также документацию Apple здесь: https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html
Спасибо! Это действительно решение, к которому я пришел.
Вы имеете в виду красный вид на картинке? А что не работает? Он появляется не в том месте, или вообще не появляется, или ...? Пожалуйста, уточните свой вопрос.