在Swift中获取UIBarButtonItem的框架?

Pau*_*aul 17 uibarbuttonitem uinavigationitem ios swift

我怎么能在swift中得到rightbarbuttonItem的框架?我发现了这个:UIBarButtonItem:我怎样才能找到它的框架?但它说无法将NSString转换为UIView,或者无法将NSString转换为String:

let str : NSString = "view" //or type String
let theView : UIView = self.navigationItem.rightBarButtonItem!.valueForKey("view")//or 'str'
Run Code Online (Sandbox Code Playgroud)

目标是删除rightBarButtonItem,改为添加imageView,并使用fadeOut效果移动它.

谢谢

Chr*_*örz 32

你应该尝试像:

var barButtonItem = self.navigationItem.rightBarButtonItem!
var buttonItemView = barButtonItem.valueForKey("view")

var buttonItemSize = buttonItemView?.size
Run Code Online (Sandbox Code Playgroud)

编辑(Swift 3):

var barButtonItem = self.navigationItem.rightBarButtonItem!
let buttonItemView = barButtonItem.value(forKey: "view") as? UIView
var buttonItemSize = buttonItemView?.size
Run Code Online (Sandbox Code Playgroud)

  • 这似乎在针对iOS 11的Xcode 9 beta 6中被打破了......还有其他人看到过相同的内容吗? (7认同)
  • 不适用于新的SDK和Xcode 8.3.1你有替代方案吗? (2认同)

小智 5

在 Swift4、XCode9 中

    for view in (self.navigationController?.navigationBar.subviews)! {
        if let findClass = NSClassFromString("_UINavigationBarContentView") {
            if view.isKind(of: findClass) {
                if let barView = self.navigationItem.rightBarButtonItem?.value(forKey: "view") as? UIView {
                    let barFrame = barView.frame
                    let rect = barView.convert(barFrame, to: view)
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)