如何在解除模态视图控制器后正确对齐rightBarButtonItem?

时间:2013-11-16 00:57:29

标签: ios cocoa-touch ios7 uinavigationbar uibarbuttonitem

从iOS 7开始,我的UINavigationBar中的rightBarButtonItem在解除模态视图控制器后向下移动。顶部屏幕截图显示正确的对齐方式。底部屏幕截图显示解除模态视图控制器后的错误对齐。

enter image description here

- (void) viewDidLoad
{
    [super viewDidLoad];

    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] 
        initWithTitle:@"" 
        style:UIBarButtonItemStyleDone 
        target:self
        action:@selector(didPressRightBarButtonItem)
    ];
    [self.navigationItem.rightBarButtonItem 
        setImage:[UIImage imageNamed:@"shareLightFlat"]
    ];
}

- (void) didPressRightBarButtonItem
{
    [self.navigationController 
        presentViewController:[[SomePage alloc] init] 
        animated:YES 
        completion:nil];
}

在SomePage中,我用它来解雇自己:

[self dismissViewControllerAnimated:YES completion:nil];

3 个答案:

答案 0 :(得分:2)

您不需要使用 initWithTitle:@“”

试试这个:

UIBarButtonItem *editBarButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"myImage"] style:UIBarButtonItemStyleDone target:self action:@selector(myAction:)];

self.navigationItem.rightBarButtonItems = @[editBarButton];

答案 1 :(得分:1)

我不知道为什么会这样,但是当我测试它时,如果我将按钮的标题从@“”更改为@“”,它就可以正常工作。看看它是否适合你(我的结果有些不同 - 我的按钮总是放错位置,不仅仅是在演示和解雇之后)。

答案 2 :(得分:1)

您正在分配UIBarButtonItemStyleDone样式按钮,然后设置图像。我认为这样做会更好:

UIButton * aButton = [UIButton buttonWithType:UIButtonTypeCustom];
... // Set frame and addTarget
[aButton setImage:[UIImage imageNamed:@"shareLightFlat"] forState:UIControlStateNormal];
UIBarButtonItem * editBarButton = [[UIBarButtonItem alloc] initWithCustomView:aButton];

我没有看到iOS7的任何相关问题。