gpt4 book ai didi

ios - 使用自定义高度在 UINavigationBar 中垂直居中元素

转载 作者:可可西里 更新时间:2023-11-01 04:30:10 25 4
gpt4 key购买 nike

我正在开发一个 iOS 6 和 7 应用程序,它要求导航栏比通常的 44/64 磅高我搜索了高低,到目前为止,最干净的解决方案似乎是使用类别(或子类)并实现 - (CGSize)sizeThatFits:(CGSize)size 方法以返回不同的大小.

这在制作 时效果很好,但是这样做会导致里面的所有项目都停留在导航栏的底部,而我想让它们居中。我已经尝试使用 Appearance Proxy 协议(protocol)来定义按钮的垂直偏移,特别是这段代码

[[UIBarButtonItem appearance] setBackgroundVerticalPositionAdjustment: -10    forBarMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setBackButtonBackgroundVerticalPositionAdjustment: -10 forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setTitleVerticalPositionAdjustment: -10 forBarMetrics: UIBarMetricsDefault];

在 iOS 6 上工作得很好,产生了这个结果

iOS 6

但在 iOS 7 上不起作用,给我这个。

iOS 7

我已经了解到,在 iOS 7 下,调整仅在使用自定义 View 时有效,但对我来说这似乎很奇怪,尤其是考虑到 setBackButtonTitlePositionAdjustment:forBarMetrics: 实际上将后退按钮的文本向上移动,但不是人字形,标题实际上确实向上移动了。

我也尝试过子类化路线,使用 layoutSubviews 将 UINavigationBar 内的 View 向下移动。这行得通,但是当然,当按下新的 View Controller 时,按钮会在转换过程中跳来跳去。

我错过了什么吗?提前致谢

更新 我已经编辑了描述以更清楚地表明我的问题是关于栏内的内容,而不是栏本身。

最佳答案

对于这个问题,我发现的最干净的解决方案是使用我自己的 UINavigationBar 子类,并通过覆盖 layoutSubviews 方法使按钮垂直居中:

- (void)layoutSubviews
{
[super layoutSubviews];

NSArray *subviews = self.subviews;
for (UIView *view in subviews) {
if ([view isKindOfClass:[UIButton class]]) {
view.frame = ({
CGRect frame = view.frame;
CGFloat navigationBarHeight = CGRectGetHeight(self.frame);
CGFloat buttonHeight = CGRectGetHeight(view.frame);
frame.origin.y = (navigationBarHeight - buttonHeight) / 2.0f;
frame;
});
}
}
}

要使 UINavigationController 使用 UINavigationBar 的子类,您可以使用 initWithNavigationBarClass:toolbarClass: 初始化程序:

UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[MyNavigationBar class] toolbarClass:nil];

关于ios - 使用自定义高度在 UINavigationBar 中垂直居中元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20883052/

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