UIBarButtonItem在栏上错误地制作动画?

时间:2016-01-26 22:38:43

标签: ios uibarbuttonitem uinavigationitem

我正在尝试做一件简单的事情:在我的navBar的右侧添加一个UIBarButtonItem。看起来像一个简单的任务:

UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:@"Button" style:UIBarButtonItemStylePlain target:self action:@selector(buttonTapped)];
[self.navigationItem setRightBarButtonItem:button];

但是当调用该方法时,会发生一件奇怪的事情:该按钮从条形图的左侧一直滑过。

不是仅仅出现在右侧,右侧的条形按钮出现在最左侧,快速滑过整个导航栏(位于中间标题下方),并在右侧位置减速停止。从那以后,它完全按预期工作。

听起来很简单,我无法让这个正确的按钮停止滑动。我尝试将animated:NOanimated:YES添加到setRightBarButtonItem:方法,但无论如何都没有效果。无论左侧是否存在UIBarButtonItem,都会发生这种情况。我尝试过使用setRightBarButtonItems:@[button],但幻灯片动画没有改变。

有没有人知道如何在我的navBar右侧添加一个简单的UIBarButtonItem而不从侧面滑入?

2 个答案:

答案 0 :(得分:1)

你在某种动画中嵌入了setRightBarButtonItem 如果你仔细看非常,你会注意到它实际上并没有从每个说法从左到右,而是从(0,0)大小为(0,0)到最后的静止位置和尺寸。 navigationItem在动画中被扣为人质。

为了说服自己,你可以运行这个简单的片段:

func buttonTapped() {
    UIView.animateWithDuration(5) { () -> Void in
        let button = UIBarButtonItem(title: "Button",
                                     style: .Plain,
                                    target: self,
                                    action: "buttonTapped")
        self.navigationItem .setRightBarButtonItem(button, animated: false)
    }
}

<强>演示

Animation demonstation

答案 1 :(得分:0)

我遇到了同样的问题,就我而言,我在rightBarButtonItem上添加了“隐藏键盘”按钮。我在UIKeyboardWillShow通知的选择器中进行了此操作,也许从动画块中调用了此选择器以显示键盘。我只是在添加按钮时禁用了动画。

UIView.setAnimationsEnabled(false)
self.navigationItem.setRightBarButton(hideKeyboardButton, animated: true)
UIView.setAnimationsEnabled(true)