Добавить сегментированный элемент управления в панель навигации и сохранить заголовок с помощью кнопок

Я хочу добавить сегментированный элемент управления в панель навигации, но также сохранить заголовок и кнопки, например, в разделе покупки iOS 7 Appstore ( пример )

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

8 Solutions collect form web for “Добавить сегментированный элемент управления в панель навигации и сохранить заголовок с помощью кнопок”

Я попытался решить вашу проблему, используя другой подход, так как использование навигационной панели только не показалось вам работать (возможно, это связано с тем, что приложение AppStore использует частный api, но я недостаточно осведомлен, чтобы точно сказать …) В любом случае Я просто использовал панель инструментов, расположенную чуть ниже панели навигации, на которой я добавил сегментированный элемент управления, все внутри обычного UIViewController.

Вот как это выглядит в Раскадке: Раскадровка

И это результат в Simulator:

имитатор

Просто будьте осторожны, чтобы компенсировать представление таблицы вниз, чтобы учитывать вертикальное пространство, используемое панелью инструментов. Надеюсь это поможет!

Я нашел два решения:

1) Как было предложено neural5torm, вы можете добавить сегментированный элемент управления в UIView с тем же фоновым цветом панели навигации

Вы можете удалить линию волос UINavigationBar таким образом:

for (UIView *view in self.navigationController.navigationBar.subviews) { for (UIView *view2 in view.subviews) { if ([view2 isKindOfClass:[UIImageView class]]) { [view2 removeFromSuperview]; } } } 

Это нормально для непрозрачной навигационной панели.

Если вы хотите полупрозрачную панель навигации:
2) Подкласс UINavigationBar для создания более высокого бара путем переопределения sizeThatFits

 - (CGSize)sizeThatFits:(CGSize)size { size.width = self.frame.size.width; size.height = your height (probably 88.0f); return size; } 

Чтобы использовать свою настраиваемую панель навигации:

 UINavigationController *navController = [[UINavigationController alloc] initWithNavigationBarClass:[YouNavigationBar class] toolbarClass:nil]; [navController setViewControllers:@[viewController]]; 

Элементы заголовка и кнопки будут внизу. Отрегулируйте их вертикальные положения (в начале настраиваемой панели навигации или через внешний прокси)

 // Title view [self setTitleVerticalPositionAdjustment:-dy forBarMetrics:UIBarMetricsDefault]; // Button item as icon/image [[UIBarButtonItem appearanceWhenContainedIn:[YourCustomNavigationBar class], nil] setBackgroundVerticalPositionAdjustment:-dy forBarMetrics:UIBarMetricsDefault]; 

Посмотрите на ссылку класса UIBarButtonItem, также есть setTitlePositionAdjustment и другие методы для кнопки «Назад»

Когда вы создаете сегментированный элемент управления, добавьте его в панель навигации

 [self.navigationController.navigationBar addSubview:segmentedControl]; 

Сегментированный элемент управления будет наверху. Отрегулируйте его вертикальное положение путем переопределения didAddSubview в пользовательской панели навигации

 - (void)didAddSubview:(UIView *)subview { [super didAddSubview:subview]; if ([subview isKindOfClass:[UISegmentedControl class]]) { CGRect frame = subview.frame; frame.origin.y += your extra height (probably 44.0f); subview.frame = frame; } } 

Вы можете найти панель навигации с UISegmentedControl в примере Apple Sample Code: https://developer.apple.com/library/ios/samplecode/NavBar/Introduction/Intro.html

Вот моя интерпретация этого кода (создайте программно):

 // File MySegmController.h @interface MySegmController : UIViewController @end // File MySegmController.m #import "MySegmController.h" @interface MyNavBarView : UIView @end @interface MySegmController ()<UITableViewDataSource, UITableViewDelegate> { UISegmentedControl* _segm; UITableView* _table; } @end #define SEGM_WIDTH 250 @implementation MySegmController - (void)loadView { [super loadView]; self.view.backgroundColor = [UIColor whiteColor]; self.title = @"Title"; float w = self.view.bounds.size.width; NSArray* items = [[NSArray alloc] initWithObjects: @"One", @"Two", @"Three", nil]; _segm = [[UISegmentedControl alloc] initWithItems: items]; [items release]; [_segm sizeToFit]; _segm.frame = CGRectMake((w - SEGM_WIDTH) / 2, 0, SEGM_WIDTH, _segm.bounds.size.height); _segm.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; _segm.selectedSegmentIndex = 0; MyNavBarView* topView = [[MyNavBarView alloc] initWithFrame: CGRectMake(0, 0, w, _segm.bounds.size.height + 10)]; topView.backgroundColor = [UIColor whiteColor]; topView.autoresizingMask = UIViewAutoresizingFlexibleWidth; [topView addSubview: _segm]; [_segm release]; _table = [[UITableView alloc] initWithFrame: CGRectMake(0, topView.bounds.size.height, w, self.view.bounds.size.height - topView.bounds.size.height) style: UITableViewStylePlain]; _table.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; _table.dataSource = self; _table.delegate = self; [self.view addSubview: _table]; [_table release]; // add topView AFTER _table because topView have a shadow [self.view addSubview: topView]; [topView release]; } - (void)viewDidLoad { [super viewDidLoad]; self.navigationController.navigationBar.translucent = NO; // pixel_transp.png - 1x1 image with transparent background self.navigationController.navigationBar.shadowImage = [UIImage imageNamed: @"pixel_transp"]; // pixel.png - 1x1 image with white background [self.navigationController.navigationBar setBackgroundImage: [UIImage imageNamed: @"pixel"] forBarMetrics: UIBarMetricsDefault]; UIBarButtonItem* bt = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemCancel target: self action: @selector(onCancel)]; self.navigationItem.rightBarButtonItem = bt; [bt release]; } - (void)onCancel { [self.presentingViewController dismissViewControllerAnimated: YES completion: NULL]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 2; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier: @"MyId"]; if (!cell) cell = [[[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: @"MyId"] autorelease]; cell.textLabel.text = @"text"; return cell; } @end @implementation MyNavBarView - (void)willMoveToWindow: (UIWindow *)newWindow { self.layer.shadowOffset = CGSizeMake(0, 1.0f / UIScreen.mainScreen.scale); self.layer.shadowRadius = 0; self.layer.shadowColor = [UIColor blackColor].CGColor; self.layer.shadowOpacity = 0.25f; } @end 

Для этого вы можете использовать свойство подсказки для навигации. Просто установите свойство в раскадровке, как это, и панель навигации будет автоматически исчезать вверх и вниз. Единственный недостаток – текст немного мал.

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

Я попытался сделать это в Xamarin.iOS, с iOS 6, вы можете наследовать UINavigationBar и добавлять элементы управления, где хотите.

Попробуйте создать подкласс UINavigationBar и позволить ему соответствовать протоколу UIToolbarDelegate. Затем в -init-методе создайте свой элемент управления сегментом, добавьте его на UIToolBar и установите его делегат в свой пользовательский класс UINavigationBar. Затем напишите эту магию:

 - (UIBarPosition)positionForBar:(id <UIBarPositioning>)bar { return UIBarPositionTopAttached; } 

Удачи!

Я не полностью его реализовал, но вот что я планирую сделать. (ios7) Это будет иметь заголовок и кнопки на одной панели навигации рядом.

В раскадровке добавьте пустой экран в панель навигации. Затем добавьте метку и сегментированный элемент управления к этому виду. Это позволяет вам добавить любой элемент управления, который вы хотите на навигационную панель. Пока пользовательский интерфейс работает, просто не подключил его. Просто хотел поделиться тем, что я нашел до сих пор.

Мое решение было так:
Добавьте панель инструментов и сегментированный элемент управления в ваш xib файл. Настройте его так, как вам нужно, и подключите его к розетке вашего контроллера:

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

Затем поместите это в метод viewDidLoad :

 - (void)viewDidLoad { [super viewDidLoad]; // add after your setup code UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:self.segmentedControl]; self.navigationItem.rightBarButtonItem = item; } 

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

  • Настройка кнопок управления левой и правой кнопками UISegmentedControl
  • как распознавать касания по uisegmentedcontrol - даже на выбранном сегменте?
  • UISegmentedControl под UINavigationbar в iOS 7
  • Полностью удалите разделители UISegmentedControl. (iphone)
  • Настроить UISegmentedControl на iOS 8
  • Значение UISegmentedControl изменено программно
  • iOS - запрет настроек UIAppearance изменять вид вспомогательного устройства ввода UIWebView
  • Как отобразить только нижнюю границу для выбранного элемента в UISegmentedControl?
  • Как настроить видимость областей UISearchBar?
  • Как UISegmentedControl изменяет размеры своих изображений контента?
  • Как рассчитать правильную ширину для сегментов UISegmentedControl?
  • Interesting Posts

    можете ли вы хранить несколько методов в одном селекторе?

    Поиск метода Xcode 5.1 допускает только один символ?

    iOS не может выделять новый объект в случае коммутатора

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

    как настроить FSCalendar

    iOS iTunes Не удается удалить устройства: произошла неуказанная ошибка. Обновите и повторите попытку

    Как удалить профили подготовки из Xcode

    Недокументированные коды ошибок NSURLErrorDomain (-1001, -1003 и -1004) с использованием StoreKit

    Код для проверки iOS 32-бит или 64-бит?

    Изменение локализации NSError localizedDescription

    Могу ли я проверить производительность одного раздела в моем приложении с помощью XCTest?

    Определите самый большой размер изображения PHASset, доступный на устройстве iOS

    Использование waitForDuration () в spriteKit swift

    Я использую google analytics в своем проекте, для чего требуется AdSupport Framework

    Как правильно установить перспективу в CATransform3D

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.