更改 UIToolbar 项会导致工具栏变为空白

Posted

技术标签:

【中文标题】更改 UIToolbar 项会导致工具栏变为空白【英文标题】:Changing UIToolbar Items Causes Toolbar to Go Blank 【发布时间】:2015-03-20 21:50:43 【问题描述】:

我在 Storyboard 中创建了一个自定义 UIToolbar,其中包含倒带、暂停和快进 UIBarButtonItem。单击时,我试图用播放按钮替换暂停按钮。我的代码如下:

@IBOutlet weak var bottomToolbar: UIToolbar!

@IBAction func playPause() 
    var newButton: UIBarButtonItem
    if !self.timer.valid 
        let aSelector : Selector = "updateTime"
        self.timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: aSelector, userInfo: nil, repeats: true)
        newButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Pause, target: self, action: "playPause")
    
    else 
        self.timer.invalidate()
        newButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Play, target: self, action: "playPause")
    
    var items = self.bottomToolbar.items
    items?[3] = newButton
    self.bottomToolbar.setItems(items, animated: true)

工具栏初始化为带有白色按钮的深灰色背景。但是,在尝试按钮切换后,整个工具栏变为白色。有什么想法吗?

更新 1: 因此,在弄乱了颜色并进一步浏览代码之后,我发现除了工具栏变白之外,只有暂停/播放按钮消失了。但即使在消失后,单击它应该在的位置仍然会向 VC 发送信号。并且尝试将工具栏背景重置为深灰色也无济于事。

【问题讨论】:

单步执行代码时,最后一行之前items的内容是什么?是否符合预期? @Mundi 是的,据我所知,items 数组包含所有正确的 UIBarButtonItems。总共有 7 个 - 灵活空间、倒带、灵活空间、播放/暂停、灵活空间、快进和灵活空间。倒带和快进项目具有正确的动作和目标,所以我认为数组的其余部分是好的。 嗯,工具栏代码看起来不错。您可以尝试发送setNeedsDisplay。这个问题很可能在其他地方被发现。 setNeedsDisplay 没用 :( 谢谢,我会尝试寻找其他地方 你解决过这个问题吗? 【参考方案1】:

我最近遇到了类似的问题。帮助将toolbar.Items 设置为一个空数组,然后再将其设置为您的项目。

我的 swift 非常有限,所以请原谅任何编译器错误:

 items = self.bottomToolbar.items
 self.bottomToolbar.setItems:([], animated: false)
 items?[3] = newButton
 self.bottomToolbar.setItems(items, animated: true)

【讨论】:

感谢您的建议,但没有奏效。有趣的是,将工具栏项设置为空数组也会导致它变为空白。

以上是关于更改 UIToolbar 项会导致工具栏变为空白的主要内容,如果未能解决你的问题,请参考以下文章

UIViewController:UITableView 和 UIToolbar 之间的空白

无法使用白色按钮项色调使 UIToolBar 变为黑色(ios 9,Swift)

当光标离开激活项时,工具条菜单项会自行更改颜色

在 UIToolbar 中的 UIBarButtonItem 上更改 tintColor 会导致按钮消失并从左侧动画化

NavigationController UIToolbar 更改项

如何更改 UIToolbar 的高度? [复制]