Как сделать , UISegmentedControl
как часть UINavigationBar
под ним? Это связано с UINavigationBar
или это полностью отдельное представление, только что добавленное как подпредставление к UINavigationController
контроллеру представления. Похоже, это часть UINavigationBar
панели, поскольку под полосой есть тень.
ios
uinavigationbar
uisegmentedcontrol
Йерибовен
источник
источник
Ответы:
Это простой эффект.
Сначала разместите сегмент на панели инструментов. Разместите эту панель инструментов прямо под панелью навигации. Установи делегат на панели инструментов на ваш контроллер представления, и вернуться
UIBarPositionTopAttached
вpositionForBar:
. Если выполнить интерактивный всплывающий жест, вы можете увидеть в приложении магазина, что полоса сегментов не перемещается так же, как панель навигации. Это потому, что это не одна и та же планка.Теперь удалим линию роста волос. «Линия роста волос» - это
UIImageView
часть панели навигации. Вы можете найти его и сделать скрытым. Это то, что Apple делает, например, в своем родном приложении-календаре, а также в приложении для магазина. Не забудьте показать его, когда текущий вид исчезнет. Если вы немного поиграете с приложениями Apple, вы увидите, что линия волос скрытаviewWillAppear:
и отображаетсяviewDidDisappear:
.Чтобы добиться стиля строки поиска, просто установите для нее
searchBarStyle
значениеUISearchBarStyleMinimal
.источник
initWithRect: CGRectMake(0, self.toplayoutGuide.length, 320, 44)
или, может быть, использовать автоматическое размещение для его размещения? Какой будет новая вершина childViewsself.toplayoutGuide.length + 44
?Другой подход - найти линию роста волос и переместить ее под добавленную панель инструментов. Вот что я придумал.
Я также обнаружил, что образец кода Apple NavBar (настройка UINavigationBar) очень полезен для решения этой проблемы.
Также не забудьте обработать верхнюю границу UIToolbar , она может появиться , и вы можете спутать ее с линией волос NavBar. Я также хотел, чтобы UIToolbar выглядел точно так же, как NavBar, тогда вы, вероятно, захотите настроить панели инструментов
barTintColor
.источник
Вот протоколно-ориентированный подход Swift к этой конкретной проблеме, основанный на принятом ответе:
HideableHairlineViewController.swift
SampleViewController.swift
источник
shadowImage
свойство панели навигации.Вы можете найти панель навигации с UISegmentedControl в образце кода Apple: https://developer.apple.com/library/ios/samplecode/NavBar/Introduction/Intro.html
Или вы можете создать его программно, вот код из моего ответа в другом потоке Добавить сегментированный элемент управления на панель навигации и сохранить заголовок с помощью кнопок
источник
Я хотел сделать то же самое .. И получил вот что:
1 - подкласс UINavigationBar
2 - Установите NavigationController с подклассом
3 - Добавьте свой UISegmentedControl в navigationBar
4 - Беги и развлекайся -> не забудьте поставить одинаковый цвет на обоих
источник поиска:
Взлом UINavigationBar
ТАК вопрос
источник
UINavigationButton
это частный API, и ваше приложение будет отклонено за его использование. Вы должны попытаться замаскировать использование этого класса.У Apple есть пример приложения специально для этого. В нем описывается установка прозрачного теневого изображения и цветного фонового изображения для панели навигации, а также способы настройки представления под панелью навигации. В нем также есть примеры других настроек панели навигации.
См. Https://developer.apple.com/library/ios/samplecode/NavBar/Introduction/Intro.html.
источник
Я пробовала удалить линию роста волос методом @Simon, но это не помогло. Я, наверное, что-то делаю не так, потому что я супер-нуб. Однако вместо удаления строки вы можете просто скрыть ее с помощью
hidden
атрибута. Вот код:Надеюсь, это кому-то поможет!
источник
UISegmentedControl под UINavigationbar в Swift 3/4
подробности
Xcode 9.2, быстрый 4
Полный образец
Полученные результаты
источник
UINavigationController
?Есть много способов сделать то, о чем вы просили. Самый простой из них - это, конечно, просто создать его в построителе интерфейса, но я предполагаю, что это не то, что вы имели в виду. Я создал пример изображения, которое вы разместили выше. Это не совсем то же самое, но вы можете поиграть с многочисленными свойствами, чтобы получить представление о том, что вы ищете.
В ViewController.h
В ViewController.m
источник
DisplaySearchBarInNavigationBar - это способ отображения панели поиска, а также ее области видимости на панели навигации.
вам нужно просто скрыть панель поиска всякий раз, когда вы показываете настраиваемый заголовок
источник