Ios 在斯威夫特得到了一个维吾尔布托人的框架?

Ios 在斯威夫特得到了一个维吾尔布托人的框架?,ios,swift,uibarbuttonitem,uinavigationitem,Ios,Swift,Uibarbuttonitem,Uinavigationitem,我怎样才能在斯威夫特中得到一个右翼巴布托教派的框架?我发现:但它说无法将NSString转换为UIView,或者无法将NSString转换为字符串: let str : NSString = "view" //or type String let theView : UIView = self.navigationItem.rightBarButtonItem!.valueForKey("view")//or 'str' 目标是删除RightBarButtonim,改为添加imageView,

我怎样才能在斯威夫特中得到一个右翼巴布托教派的框架?我发现:但它说无法将NSString转换为UIView,或者无法将NSString转换为字符串:

let str : NSString = "view" //or type String
let theView : UIView = self.navigationItem.rightBarButtonItem!.valueForKey("view")//or 'str'
目标是删除RightBarButtonim,改为添加imageView,并使用淡出效果移动它


谢谢

您应该像这样尝试:

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

var buttonItemSize = buttonItemView?.size
编辑(Swift 3):

var barButtonItem = self.navigationItem.rightBarButtonItem!
let buttonItemView = barButtonItem.value(forKey: "view") as? UIView
var buttonItemSize = buttonItemView?.size
在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)
                }
            }
        }
    }

为此,必须使用通过
customView
创建的UIBarButtonim对象;以常规方式创建的UIBarButtonim对象没有足够的公开信息。重要的是,在父级UINavigationController的UINavigationBar完全布局其整个子视图树后,要查找帧。对于大多数用例,visible UIViewController的
ViewDidAspect
就是一个很好的近似值

非常感谢,使用
AnyObject?
按钮查看它运行良好不适用于新的SDK和Xcode 8.3.1您有其他选择吗?@JVS
。valueForKey
返回一个Any?。强制转换到UIView以使其可编译<代码>变量buttonItemSize=(buttonItemView为?UIView)。大小swift3类似:let buttonItemSize=(buttonItemView为!UIView)。frame.size这似乎在针对iOS 11的Xcode 9 beta 6中被破坏了。。。其他人也看到了吗?@Aerox试着在ViewDidAspect()中称之为method@Aerox您也可以尝试在
viewdilayoutsubviews
中调用它,但应小心避免调用过多。
import UIKit

class ViewController: UIViewController {

    let customButton = UIButton(type: .system)

    override func viewDidLoad() {
        super.viewDidLoad()

        customButton.setImage(UIImage(named: "myImage"), for: .normal)
        self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: customButton)
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print(self.customButton.convert(self.customButton.frame, to: nil))
    }
}