UIBarButtonItem не работает в ios11

Короче говоря, в iOS10 левая и правая кнопки, пользовательская метка работает без проблем, в iOS11 ничего не отображается. Я читал в другом месте, что мне нужно добавить ограничения для кнопок, но это не помогает. Код, вызываемый в viewDidLoad().

self.connectionButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0,0.0,74.0,29.0)];
[self.connectionButton.widthAnchor constraintEqualToConstant:74].active = YES;
[self.connectionButton.heightAnchor constraintEqualToConstant:29].active = YES;
self.connectionButton.backgroundColor = [UIColor yellowColor];
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:self.connectionButton];
self.navigationItem.rightBarButtonItem = buttonItem;

Появление:

[[UINavigationBar appearance] setTranslucent:YES];
[[UINavigationBar appearance] setShadowImage:[UIImage new]];
[[UINavigationBar appearance] setBackgroundImage:[UIImage new] forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundColor:[UIColor clearColor]];

Когда я проверяю кадр во время выполнения, он правильный (0,0,74,29). Однако на панели не отображается кнопка.

XCode 9 beta 8 не работает ни на устройстве, ни на симуляторе.


person Tom    schedule 30.08.2017    source источник
comment
Пожалуйста, поделитесь полной настройкой NavBar (настройка внешнего вида и т. д.). В каком методе вы устанавливаете rightBarButtonItem?   -  person Sven Driemecker    schedule 30.08.2017
comment
Отредактировано. Afaik ничего особенного, значения по умолчанию в раскадровке для корневого контроллера.   -  person Tom    schedule 30.08.2017
comment
У меня также такая же проблема в ios11 barbuton time iboutlet не работает ... он показывает, что ключ не соответствует кодированию значения ключа, любая помощь   -  person Tech    schedule 21.09.2017


Ответы (1)


При дальнейшем тестировании я обнаружил, что панель навигации ничего не показывает — даже заголовок по умолчанию. После нескольких часов, потраченных на комментирование/раскомментирование фрагментов несвязанного кода, я нашел виновника:

    override var traitCollection: UITraitCollection {  
        var horizTraitCollection = UITraitCollection(horizontalSizeClass: .regular)  
        if view.bounds.width < view.bounds.height {  
            horizTraitCollection = UITraitCollection(horizontalSizeClass: .compact)  
        }

        return UITraitCollection(traitsFrom: [horizTraitCollection, UITraitCollection(verticalSizeClass: super.traitCollection.verticalSizeClass)])
     }

Это то, что я использую для переопределения класса размера для портретной/пейзажной презентации. IMO совершенно не связано с внешним видом панели навигации. Не знаю, почему ломается панель навигации и как это исправить.

РЕДАКТИРОВАТЬ: после некоторой настройки мне удалось заставить его работать на iPad, но не на iPhone. После некоторой настройки я заработал и на iPhone:

override var traitCollection: UITraitCollection {  
    if UIDevice.current.userInterfaceIdiom == .pad {  
        var horizTraitCollection = UITraitCollection(horizontalSizeClass: .regular)  
        if UIDevice.current.orientation.isPortrait {  
            horizTraitCollection = UITraitCollection(horizontalSizeClass: .compact)  
        }  
        return UITraitCollection(traitsFrom: [horizTraitCollection, UITraitCollection(verticalSizeClass: super.traitCollection.verticalSizeClass)])  
    }  
    return super.traitCollection  
}  
person Tom    schedule 30.08.2017