1

长话短说iOS10左侧,右侧按钮,自定义标签没有问题,iOS11没有显示。我在其他地方看过,我需要为按钮添加约束条件,但这没有帮助。在viewDidLoad()中调用的代码。UIBarButtonItem不能在ios11中工作

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,不能在任何设备或模拟器上工作。

+0

请分享您的完整NavBar设置(外观配置等)。你在哪种方法设置rightBarButtonItem? –

+0

已编辑。 Afaik没什么特别的,默认在故事板上用于根控制器。 – Tom

+0

我也有同样的问题,在ios11 barbuton时间iboutlet不工作...它显示不是密钥值编码兼容的关键,任何帮助 – Tech

回答

0

随着更多的测试,我发现导航栏不显示任何东西 - 甚至没有默认外观的标题。后浪费在评论小时/无关的代码取消注释块,我发现罪魁祸首:

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 
} 
相关问题