2015-10-13 77 views
0

我注意到了iOS 9中的一个错误,或者可能是我没有正确使用某些东西。iOS 9在iOS 9中旋转后,UINavigation栏内容不居中?

在针对iPhone的空项目下面的代码:

UIBarButtonItem *anotherButton = [[UIBarButtonItem alloc] initWithTitle:@"Show" style:UIBarButtonItemStylePlain target:self action:@selector(test:)]; 
self.navigationItem.rightBarButtonItem = anotherButton; 

self.navBar.items = @[self.navigationItem]; 

我添加了一个自定义的按钮,导航栏属性。我注意到,在从纵向旋转到横向之后,按钮向下移动,导航栏中的按钮未正确居中。如果我编译的iOS 8.4例如

Portrait Screen Landscape Screen 此代码工作正常,但不能在iOS 9

有没有人遇到过吗?

谢谢!

回答

0

我设法与和覆盖的方法修复与自定义导航栏类​​问题:

-(void) layoutSubviews 
{ 
    [super layoutSubviews]; 

    for (UIView *view in self.subviews) 
    { 
     if ([view isKindOfClass:[UIView class]]  || 
      [view isKindOfClass:[UIButton class]] || 
      [view isKindOfClass:[UISearchBar class]] || 
      [view isKindOfClass:[UILabel class]]) 
     { 
     CGRect frame = view.frame; 
     frame.origin.y = (self.frame.size.height - frame.size.height)/2.f; 
     view.frame = frame; 
     } 
    } 
} 

可以在if语句中添加其他类型的视图类。它不是最干净的解决方案,但它现在可以完成。

1

我在iPad上看到类似的东西。当我以纵向方式启动应用程序,然后旋转到横向时,View Controller的navigationItem.titleView不再正确对齐。我简单地旋转后重置它在斯威夫特如下:

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { 
    coordinator.animateAlongsideTransition(nil) { (coordinator) -> Void in 
     self.navigationItem.titleView = someView 
    } 
} 

斯威夫特3:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { 
    coordinator.animate(alongsideTransition: nil) { (coordinator) -> Void in 
     self.navigationItem.titleView = self.someView 
    } 
} 
+0

感谢您的回答,但我确实是你从开始描述:)。 –