iOS 7 UIToolBar Переключение со строкой состояния

Я обновил свой проект с iOS 6 до iOS 7, но, похоже, немного проблем. Строка состояния и панель инструментов являются переопределяющими и очень близкими друг к другу. Панель инструментов была добавлена ​​ранее, вручную перетащив ее в раскадровку. Вот как это проявляется:

панель инструментов

Я видел несколько вопросов, которые предлагают использовать позицию positionForBar: "и" – (UIBarPosition) positionForBar: (id) ", но я точно не знаю, как их использовать, небольшое объяснение и простой способ сделать это могут Помогите. Благодаря!

UPDATE: Ниже приведен код, который также нуждается в исправлении. Он работал отлично раньше, но поскольку элемент управления detailview (WebViewController) теперь встроен в контроллер навигации, приведенный ниже код вызывает исключение. Похоже, мне нужно изменить первую строку в этом методе.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { WebViewController *wvc = [self.navigationController.parentViewController childViewControllers][1]; RSSItem *entry = [[channel items] objectAtIndex:[indexPath row]]; wvc.title = entry.title; wvc.urlString = entry.link; } 

Если ваша настройка представляет собой разделенное представление, такое как настройка с двумя видами контейнера, вы должны это сделать. Когда вы настраиваете представления контейнера, перетащите вверх, пока не увидите пунктирную синюю линию, указывающую, что верхняя часть находится в нижней части строки состояния. Сделайте это с обоими видами контейнера. Добавьте панель инструментов к встроенному контроллеру (а не к виду контейнера), прикрепленному к верхней части представления этого контроллера. С левым представлением, встроенным в контроллер навигации, мой экран выглядел так:

введите описание изображения здесь

 _toolBar.delegate = self; - (UIBarPosition)positionForBar:(id <UIBarPositioning>)bar { CGRect frame = _toolBar.frame; frame.origin = CGPointMake(0, [UIApplication sharedApplication].statusBarFrame.size.height); _toolBar.frame = frame; return UIBarPositionTopAttached; } 

портретная панель

ландшафтный бар

Верхнее ограничение вашего представления больше не должно быть верхним пространством для просмотра, а скорее топ-макетом верхнего плана.

Вы можете сделать это, перемещая верхнее пространство вниз под панель состояния, а затем используя меню ограничений, чтобы добавить ограничение к ближайшему соседу, который теперь должен быть верхним руководством по макету, или вы можете сделать это, как описано в этой ссылке на apple библиотека разработчиков .

Помните, что вы не должны просто перемещать вещи в IB по двум причинам:

  1. Не совместим с iOS 6
  2. Не будет увеличивать фоновый эффект верхнего бара в строке состояния

Чего не делать...

Итак, если вы хотите совместимость с iOS6 и iOS7, вы можете добавить условное выражение для объектов, которые требуют настройки в ViewDidLoad . Предостережение – это последний случайный сценарий – всегда пытайтесь исправить его с помощью автозапуска / IB:

 #import <Availability.h> #ifdef __IPHONE_7_0 CGRect barFrame = topBar.frame; barFrame.origin = CGPointMake(0, [UIApplication sharedApplication].statusBarFrame.size.height); [topBar setFrame:barFrame]; // move other stuff around too #endif 

И установите делегат вашего бара так же, как Luniz выше, переопределите positionForBar .

 topBar.delegate = self; - (UIBarPosition)positionForBar:(id <UIBarPositioning>)bar { return UIBarPositionTopAttached; } 

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

Мое решение состояло в том, чтобы сделать панель инструментов на 64 точки высотой и установить верхнее пространство для супервизора в 0.

При этом вам нужно убедиться, что вы не создаете ограничение для руководства по макету Top Space. Я смог сделать это в Interface Builder, установив Frame равным 0,0 с высотой 64. Затем я использовал диалог Pin в меню плавающего инструмента. Я использовал ноль с верхним лучом I, чтобы создать ограничение.

Нижние края совпадают в Мастере и деталях, и раскраска согласована. Элементы управления на панели инструментов оказались непереполненными.

Swift 3

Подключите делегат панели и совместите с UIToolbarDelegate. Затем добавьте этот метод делегата:

 func position(for bar: UIBarPositioning) -> UIBarPosition { return UIBarPosition.topAttached } 

потому что сейчас

 enum UIBarPosition : Int { case any case bottom case top case topAttached } 
  • Как я могу использовать сегментированный элемент заполнения пространства на панели инструментов в приложении iOS?
  • Установите rootViewController из UINavigationController с помощью метода, отличного от initWithRootViewController
  • Как вы получаете значки UIToolBar?
  • Как добавить UIToolbar программно в приложение iOS?
  • iOS почему переместил пробел ToolBar на клавиатуру
  • UIToolbar слайды в строке состояния
  • Как создать эту панель программно
  • Как сделать iOS UIToolbar со стрелками влево / вправо слева
  • Поместите элемент кнопки на панели инструментов
  • iOS7 UIStatusBar нечеткое размытие
  • Добавить UITextField в UIToolbar
  • Interesting Posts

    Google+ в iOS 9.3 висит

    Лучший способ определить тип аппаратного обеспечения, iPhone4 или iPhone5?

    Как сохранить данные, когда приложение iphone переходит в состояние фона или переднего плана?

    Наследовать из класса Swift в Objective C

    Методы делегатов UITextView

    Как настроить высоту таблицы ячеек при загрузке из пользовательских ячеек?

    Как выполнить асинхронный запрос в фоновом потоке?

    Формат даты и времени после настроек текущей области устройства

    Как загрузить CSV-файл с сервера в Objective-C

    TTTAttributedLabel и popover для ссылки

    Библиотека отслеживания заявок не была загружена вовремя – не работает на ios 7

    Swift: Я хочу знать, какова строка указательного пути кнопки, которую я нажал?

    Загрузка веб-страницы в UIWebView в Xcode 4.2 – как правильно подключить IBOutlets и обеспечить загрузку веб-страницы?

    Swift – «AnyObject!» не конвертируется в «ViewController»; вы хотели использовать «как!» заставить downcast?

    Странное поведение showDeleteConfirmation на UITableViewCell

    Давайте будем гением компьютера.