无法获取 navigationItem.rightBarButtonItem 的 UIView/Frame - iOS
Posted
技术标签:
【中文标题】无法获取 navigationItem.rightBarButtonItem 的 UIView/Frame - iOS【英文标题】:Unable to get UIView/Frame of navigationItem.rightBarButtonItem - iOS 【发布时间】:2019-12-10 06:46:16 【问题描述】:我在 Swift 5 中的应用程序在右上角显示了一个导航项,使用
override public func viewDidLoad()
super.viewDidLoad()
var deleteNavBarItem = UIBarButtonItem.init(barButtonSystemItem:.trash, target: self, action: #selector(deleteButtonOnClick))
navigationItem.rightBarButtonItem = deleteNavBarItem
...
由于一些需求,我们想根据导航栏项目的位置显示一些自定义的子视图。
因此我想获得整个视图的这个rightBarButtonItem
的相对位置/frame
。
我已经尝试通过论坛提供的一些答案来使用下面的代码。
let view1 = navigationItem.rightBarButtonItem?.value(forKeyPath: "view") as? UIView
let view2 = deleteNavBarItem.value(forKey: "view") as? UIView
但是 view1
和 view2
都返回 nil。
是否有任何替代解决方案可以找到rightBarButtonItem
的frame
/UIView
?
请多多指教。
【问题讨论】:
您调用此代码的位置 【参考方案1】:创建一个条形按钮插座并使用以下代码获取框架
class ViewController: UIViewController
@IBOutlet weak var rightBarButton: UIBarButtonItem!
override func viewDidLoad()
super.viewDidLoad()
if let barButtonFrame = rightBarButton.perform(#selector(getter: UIViewController.view)).takeRetainedValue().frame
print(barButtonFrame) // prints (0.0, 0.0, 42.0, 44.0)
【讨论】:
【参考方案2】:您可以使用UIView/UIButton
创建自定义栏按钮并在rightBarButtonItem中添加按钮。
let button = UIButton(type: UIButton.ButtonType.custom)
button.setImage(UIImage(named: "getstarted"), for: .normal)
button.addTarget(self, action:#selector(callMethod), for: .touchUpInside)
button.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
let barButton = UIBarButtonItem(customView: button)
navigationItem.rightBarButtonItem = [barButton]
【讨论】:
以上是关于无法获取 navigationItem.rightBarButtonItem 的 UIView/Frame - iOS的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 StorageClass 配置卷 - 无法获取存储帐户的存储密钥