无法获取 UIView/Frame of navigationItem.rightBarButtonItem - iOS



我在 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

但是,view1view2都返回零。

有没有其他解决方案可以找到rightBarButtonItemframe/UIView

恳请指教。

创建一个栏按钮插座并使用以下代码获取框架

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)
}
}
}

您可以使用UIView/UIButton创建自定义栏按钮,并在右栏按钮项中添加按钮。

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]

最新更新