我在iPhone应用中有一个导航栏,其中包含自定义UIBarButtonItems:
UIBarButtonItem* homePersonButton = [[UIBarButtonItem alloc]
initWithImage:[UIImage imageNamed:@"homePerson.png"]
style:UIBarButtonItemStylePlain
target:self action:@selector(showHomePerson)];
homePerson.png是20 x 18。
在纵向模式下效果很好,但在横向模式下,按钮上的20x18图像太高,看起来不太好。看起来iOS在标准按钮上做了一些工作,以便在更薄的导航栏中根据需要缩小图像。
处理此问题的最佳方法是什么?
另一个例子是我在导航栏的titleView中有一个自定义按钮。当应用程序旋转时,我也需要缩小它。
提前感谢你能给我的任何指示!
答案 0 :(得分:5)
工具栏和导航栏图像的大小为20 x 20,因此当您提供的图像不符合这些尺寸时,您需要离开框架来调整图像大小/缩放图像,从而导致出现问题。将图像调整大小/缩放到20x20,图像在纵向和横向上都应该看起来正确。
答案 1 :(得分:3)
steipete在评论中提到了这一点,但我觉得现在需要回答这个问题。从iOS 5开始,您可以使用UIBarButtonItem initializer:
- initWithImage:landscapeImagePhone:style:target:action:
只需将landscapeImagePhone
图片设置为您希望在横向上调整大小的图像的较小版本。
经过一些测试后,我注意到iPhone确实缩小了导航栏,因此导航栏上的UIBarButtonItem缩小了,但iPhone 6 Plus 却。 6 Plus似乎将导航栏保持在44px的高度,而普通的iPhone将其缩小到32px。因此,6 Plus也不在景观中使用landscapeImagePhone
。
我测试了这个不只是使用landscapeImagePhone
的较小尺寸图像,而是完全不同的图像。 6 Plus上的图像从未改变过。
Apple documentation for this initializer表示landscapeImagePhone
是:
用于UIUserInterfaceIdiomPhone习语中横条中项目的图像。
从iOS 9.2开始,6 Plus在纵向和横向都报告为UIUserInterfaceIdiomPhone
。之前,6 Plus曾经是UIUserInterfaceIdiomUnspecified
。我不确定何时更新了。但是,由于它现在是UIUserInterfaceIdiomPhone
,根据文档,landscapeImagePhone
也应该适用于6 Plus。
所以也许它并不像UIUserInterfaceIdiom那样依赖导航栏的高度。我不确定。请注意,这种不一致可能会被修复"在未来,因此会导致不同的行为。
答案 2 :(得分:0)
我有类似的问题。现在我使用自定义类型按钮。例如这是我的UIBarButtonItem目录。 您可以使用它来构建自定义栏按钮。
+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image highlightedImage:(UIImage *)highlightedImage target:(id)target action:(SEL)action{
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundImage: [image stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateNormal];
button.frame= CGRectMake(0.0, 0.0, image.size.width, image.size.height);
[button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:button];
return barItem;
}
然后您可以在旋转时调整条形按钮自定义视图框。
提示:
willAnimateRotationToInterfaceOrientation
,打印自定义视图
导航栏按钮项的框架..,并得到正确的
框架(在protrait模式下)你想要的,你也可以看到框架是
在横向模式下不正确,我们需要修复它。 就我而言,我只是简单地修复了自定义视图的来源......例如。
// adjust the navigation Item top, otherwise it is not proper set after rotation
_centralRootViewController.navigationItem.leftBarButtonItem.customView.top = 5;
_centralRootViewController.navigationItem.rightBarButtonItem.customView.top = 5;
注意:top是框架的y。