gpt4 book ai didi

cocoa-touch - UINavigationBar 自动调整大小

转载 作者:行者123 更新时间:2023-12-04 00:23:29 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com