iOS 9 导航栏内容旋转后不居中 iOS 9?

iOS 9 UINavigation bar content is not centred after rotation in iOS 9?

我注意到 iOS 9 中的错误,或者可能是我没有正确使用某些东西。

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

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

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

我向导航栏添加了自定义按钮 属性。我注意到从纵向旋转到横向后,按钮向下移动并且它在导航栏中没有正确居中。

Portrait Screen Landscape Screen 例如,如果我为 iOS 8.4 编译,但在 iOS 9.

上编译,则此代码工作正常

有人遇到过吗?

谢谢!

我在 iPad 上看到过类似的内容。当我以纵向启动应用程序,然后旋转到横向时,View Controller 的 navigationItem.titleView 不再正确对齐。我只是在 Swift:

中旋转后重置它
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    coordinator.animateAlongsideTransition(nil) { (coordinator) -> Void in
        self.navigationItem.titleView = someView
    }
}

Swift 3:

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

我已经设法解决了自定义导航栏 class 的问题,并使用了覆盖的方法:

-(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 语句中添加其他类型的视图 classes。它不是最干净的解决方案,但它现在可以。