cocoa-touch - UINavigationBar 自动调整大小

标签 cocoa-touch uikit uiview uinavigationbar autoresize

在我的应用程序中,我有一个 UINavigationController。不幸的是,当我旋转设备并且界面方向发生变化时, UINavigationBar 不会改变它的高度。在其他 iPhone 应用程序中,例如 Contacts.app,导航栏在横向模式下的高度略低。它必须是内置的,因为如果您从 XCode 菜单中获取导航示例应用程序并向其添加界面方向,它确实会正确更改导航栏的高度。

我怎样才能像在我见过的所有其他 iPhone 应用程序中一样调整导航栏的大小?

最佳答案

我做了一些测试,虽然我不喜欢这种方法,但它很容易做到。

在寻找一种可能有效的私有(private)方法后,我找不到。我发现的是:

@property BOOL forceFullHeightInLandscape;

- (BOOL)isMinibar;
-isMinibar 没有 setter ,所以我们不能设置它。我猜它会根据它的高度返回一个值。另外,forceFullHeightInLandscape设置为 NO ,但是它仍然没有调整它的高度。

在更改 autoresizingMask包括UIViewAutoresizingFlexibleHeight , View 确实调整为更小,但现在它太小了。但是,-isMinibar突然返回YES .所以这让我想到让 View 自行调整大小,将其调整到合适的高度。

所以我们开始了,一个有效的方法,即使没有私有(private) API 调用:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [self.navigationBar performSelector:@selector(sizeToFit) withObject:nil afterDelay:(0.5f * duration)];
}

您必须处理的一件事是栏下方的 View 不会调整为较小的栏,因此栏和下方的 View 之间会有间隙。解决这个问题的最简单方法是添加一个容器 View ,就像 UINavigationController 的情况一样。 .你会想出类似的东西:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [self performSelector:@selector(resizeViewsForNavigationBar) withObject:nil afterDelay:(0.5f * duration)];
}

- (void)resizeViewsForNavigationBar {
    [self.navigationBar sizeToFit];

    // Resize containerView accordingly.
    CGRect containerViewRect = self.containerView.frame;
    containerViewRect.origin.y = CGRectGetMaxY(self.navigationBar.frame);
    containerViewRect.size.height = CGRectGetMaxY(self.view.frame) - containerViewRect.origin.y;
    self.containerView.frame = containerViewRect;
}

关于cocoa-touch - UINavigationBar 自动调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3538111/

相关文章:

ios - ACAccountCredential 为 oauthToken 返回 null

objective-c - 我正在使用 drawRect : how can I draw a button? 实现 UIView 子类

objective-c - 如何在 objective-c 中维护 session ?

iphone - 如何以编程方式 "tap"UITableView 单元格?

iphone - 使用 iPhone 多点触控键盘搜索按钮

ios - 从 CIImage 创建 UIImage 时颜色反转 (iOS 6.0)

ios - UIViewController 中的表格 View 没有获得 hidesBarsOnSwipe 功能

ios - 如何调整添加为 UITableViewController header 的 UIView 的高度

ios - 为什么 webview 不适合所有 View ?

iphone - 何时在 iPhone 上使用 UIView 与 UIViewController?