我正在将 iOS 6 应用程序改编为 iOS 7,但遇到了一个奇怪的“错误”。在屏幕中有一个 rightBarButtonItem,其中显示了一个简单的图像。但是,如果应用程序显示警报视图,当我点击警报视图的确定按钮(此警报中的唯一按钮)时,图像会向下移动(50 px 左右)。没有与此警报视图相关联的操作,它只是提供信息。
此外,如果我更改按钮的图像 (setImage),该图像会显得格格不入。
我正在将 iOS 6 应用程序改编为 iOS 7,但遇到了一个奇怪的“错误”。在屏幕中有一个 rightBarButtonItem,其中显示了一个简单的图像。但是,如果应用程序显示警报视图,当我点击警报视图的确定按钮(此警报中的唯一按钮)时,图像会向下移动(50 px 左右)。没有与此警报视图相关联的操作,它只是提供信息。
此外,如果我更改按钮的图像 (setImage),该图像会显得格格不入。
好吧,我终于找到了一个解决方案:
我UIBarButtonItem
在. UIBarButtonItemStylePlain
_ setImage
_UIBarButtonItem
为了解决这个问题,我创建了一个UIButton
with 图像(用 设置它的框架CGRectMake
),然后我创建了UIBarButtonItem
withinitWithCustomView
并UIButton
使用CustomView
. 这样,图像总是在它应该在的地方。
编辑:
UIButton* aButton = [UIButton buttonWithType:UIButtonTypeCustom];
aButton.frame = CGRectMake(0.0, 40.0, 30.0, 30.0);
[aButton setBackgroundImage:[UIImage imageNamed:@"anImage.png"] forState:UIControlStateNormal];
[aButton addTarget:self action:@selector(aFunction:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *anUIBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:aButton];
self.navigationItem.rightBarButtonItem = anUIBarButtonItem;
我的右侧导航栏按钮也有类似的问题,当我删除有问题的栏按钮项目的“标题”值时,它就消失了。在我的情况下,标题不应该被设置,因为按钮使用图像。YMMV。
我不确定为什么它很重要,但它解决了我的问题,即栏按钮项目在 uialertcontroller 解雇时得到偏移。
我从这个问题中得到灵感:UIAlertController move leftBarButtonItem down
感谢这个 raul,我已经将它翻译成 Swift 供 Swift 用户使用:
let a = UIButton(type: .Custom)
a.frame = CGRectMake(0.0, 40.0, 30.0, 30.0)
a.setBackgroundImage(UIImage(named: "Share")!, forState: .Normal)
a.addTarget(self, action: "shareThis:", forControlEvents: .TouchUpInside)
let uiItem = UIBarButtonItem(customView: a)
self.navigationItem.rightBarButtonItem = uiItem