具有自定义UIButton的UIBarButtonItem在iOS <= 10上不可见

Luc*_* P. 1 uibutton uiview uinavigationcontroller uibarbuttonitem ios

我需要在我的navigationController的左侧为我的应用程序创建一个“汉堡菜单”按钮,但是由于NavCon是透明的,因此我的图标上需要有一个阴影。

因此,我创建了一个带有图像,阴影的自定义UIButton,并将其添加为UIBarButtonItem上的自定义视图,如下所示:

let menuButton = UIButton(type: .custom)
menuButton.addTarget(self, action: #selector(showSideMenu), for: .touchUpInside)
menuButton.setImage(#imageLiteral(resourceName: "menu_white"), for: .normal)
menuButton.tintColor = UIColor.white
menuButton.layer.masksToBounds = false
menuButton.layer.shadowColor = UIColor.black.cgColor
menuButton.layer.shadowOpacity = 1.0
menuButton.layer.shadowRadius = 5
menuButton.layer.shadowOffset = CGSize(width: 0.0, height: 1.0)

self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: menuButton)
Run Code Online (Sandbox Code Playgroud)

上面的代码在iOS 11上运行良好,但是当我在ios 9和10(模拟器和真实设备)上测试我的应用程序时,菜单图标不可见。它是可单击的,并且按预期方式工作,但是没有可见的图标。

在View Hierarchy Debugger中,我可以看到宽度和高度为0的UIButton,而在ios 11中,我可以看到带有嵌入式UIButton的普通UIButtonBarStackview。

关于如何解决此问题以及为什么会发生的任何想法?非常感谢你!

小智 5

请提及按钮框

 let menuButton =  UIButton(frame: CGRect(x: 0, y: 0, width: 70, height: 40))
Run Code Online (Sandbox Code Playgroud)

可能对您有帮助谢谢

  • 太感谢了!这成功了。我忘记设置按钮框架,所以它是(0,0,0,0)。我认为 ios 11 会负责设置框架本身,但旧版本不会。再次感谢 :) (2认同)