我正在调整iOS 6应用程序到iOS 7,我遇到了一个奇怪的“错误”。在一个屏幕上有一个rightBarButtonItem,其中有一个简单的图像显示在他的位置。但是,如果应用程序显示警报视图,当我点击警报视图的“确定”按钮(此警报中的唯一按钮)时,图像会向下移动(50 px左右)。没有与此警报视图相关联的操作,它只是提供信息。
此外,如果我更改按钮的图像(setImage),此图像将显示在原位。
答案 0 :(得分:7)
好吧,我终于找到了解决方案:
我UIBarButtonItem
UIBarButtonItemStylePlain
setImage
,UIBarButtonItem
上有UIButton
设置的图片。
要解决此问题,我已使用图片创建CGRectMake
(使用UIBarButtonItem
设置其框架),然后我使用initWithCustomView
创建了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;
。这样,图像总是在应有的位置。
编辑:
{{1}}
答案 1 :(得分:0)
感谢您的支持,我已经为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
答案 2 :(得分:0)
我的右侧导航栏按钮出现了类似的问题,当我删除违规栏按钮项的“标题”值时它就消失了。在我的情况下,标题应该永远不会被设置,因为按钮使用图像。 YMMV。
我不确定为什么这很重要但它解决了我的问题,条形按钮项目在uialertcontroller解雇时得到了抵消。
我从这个问题中得到了灵感:UIAlertController moves leftBarButtonItem down