Hai*_*ezu 5 iphone uinavigationbar uibarbuttonitem ios ios7
我正在开发一个iOS 6和7应用程序,要求导航栏比我搜索的高和低通常的44/64点更高,到目前为止,似乎最干净的解决方案是使用类别(或子类)和实现该- (CGSize)sizeThatFits:(CGSize)size方法以返回不同的大小.
这样做只会很好,但这样做会导致里面的所有项目都停留在导航栏的底部,而我想让它们居中.我尝试使用Appearance Proxy协议来定义按钮的垂直偏移,特别是此代码
[[UIBarButtonItem appearance] setBackgroundVerticalPositionAdjustment: -10 forBarMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setBackButtonBackgroundVerticalPositionAdjustment: -10 forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setTitleVerticalPositionAdjustment: -10 forBarMetrics: UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)
在iOS 6上工作得很好,产生了这个结果

但是在iOS 7上不起作用,而是给我这个.

我已经读过iOS 7下的调整仅在使用自定义视图时才有效,但对我来说这似乎很奇怪,特别是考虑到setBackButtonTitlePositionAdjustment:forBarMetrics:实际上移动后退按钮的文本,而不是雪佛龙和标题实际上轻推.
我也尝试过一个子类化路由,使用layoutSubviews向下移动UINavigationBar中的视图.这很有效,但当按下新的视图控制器时,按钮会在过渡期间跳转.
我错过了什么吗?提前致谢
更新我已经编辑了描述,以便更清楚我的问题是关于栏内的内容,而不是栏本身.
我发现这个问题的最干净的解决方案是使用我自己的子类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;
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
要UINavigationController使用您的子类,UINavigationBar您可以使用initWithNavigationBarClass:toolbarClass:初始化器:
UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[MyNavigationBar class] toolbarClass:nil];
Run Code Online (Sandbox Code Playgroud)
kjh*_*kjh -1
您只需更改导航栏的框架即可更改导航栏的大小:
CGRect navigationBarFrame = self.navigationController.navigationBar.frame;
| 归档时间: |
|
| 查看次数: |
3695 次 |
| 最近记录: |