Решение 1. В свете ответа Apple о том, что это ожидаемое поведение, мы решили проблему, удалив панель инструментов и добавив настраиваемое представление.
Я понимаю, что это возможно не во всех случаях, но обычный UIView гораздо проще настроить под внешний вид приложения, чем панель инструментов и панель навигации, где Apple контролирует расположение кнопок.
Вместо того, чтобы установить нашу пользовательскую кнопку в качестве пользовательского представления объекта кнопки панели пользовательского интерфейса, мы установили ее как подпредставление пустых кнопок пользовательского интерфейса в пользовательском представлении.
Сделав это, мы смогли вернуться к тому же виду нашего приложения для iOS 10.
Решение 2. Немного запутанно, мы обернули нашу пользовательскую кнопку просмотра во внешний UIButton, чтобы можно было установить местоположение кадра. К сожалению, это делает внешний левый край кнопки недоступным для нажатия, но исправляет внешний вид положения кнопки. См. пример:
UIButton* outerButton = [UIButton new]; //the wrapper button
BorderedButton* button = [self initBorderedButton]; //the custom button
[button setTitle:label forState:UIControlStateNormal];
[button setFrame:CGRectMake(-10, 0, [label length] * 4 + 35, 30)];
[button addTarget:controller action:@selector(popCurrentViewController) forControlEvents:UIControlEventTouchUpInside];
[outerButton addSubview:button]; //add custom button to outer wrapper button
[outerButton setFrameWidth:button.frameWidth]; //make sure title gives button appropriate space
controller.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:outerButton]; //add wrapper button to the navigation bar
controller.navigationItem.hidesBackButton = YES;
Используя этот метод, мы сохраняем нашу панель навигации и можем расположить кнопку там, где она необходима.
Редактировать: мы обнаружили, что решение 2 не работает на ios 10, это, вероятно, затронет лишь крошечный процент разработчиков, вынужденных поддерживать обратную совместимость.
Решение 3
Что нас действительно больше беспокоило из-за скученности кнопок внутри, так это тот факт, что заголовок панели навигации упирался в настраиваемую левую кнопку, размер полей был менее важен и использовался как инструмент для освобождения места. Решение состоит в том, чтобы просто добавить элемент-разделитель к левым элементам.
UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithCustomView:button];
UIBarButtonItem* spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
controller.navigationItem.leftBarButtonItems = [NSArray arrayWithObjects:backButton, spacer, nil];
person
Sashah
schedule
14.08.2017