comment pourrais-je obtenir le cadre d'un droitbarbuttonItem en rapide? J'ai trouvé ceci: IBarButtonItem: Comment puis-je trouver son cadre? mais il dit ne peut pas convertir NSString en UIView, ou ne peut pas convertir NSString en chaîne:
let str : NSString = "view" //or type String
let theView : UIView = self.navigationItem.rightBarButtonItem!.valueForKey("view")//or 'str'
Le but est de supprimer le rightBarButtonItem, d'ajouter une imageView à la place et de la déplacer avec un effet fadeOut.
Merci
Vous devriez l'essayer comme:
var barButtonItem = self.navigationItem.rightBarButtonItem!
var buttonItemView = barButtonItem.valueForKey("view")
var buttonItemSize = buttonItemView?.size
Modifier (Swift 3):
var barButtonItem = self.navigationItem.rightBarButtonItem!
let buttonItemView = barButtonItem.value(forKey: "view") as? UIView
var buttonItemSize = buttonItemView?.size
Dans 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)
}
}
}
}
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))
}
}
Vous devez utiliser des objets UIBarButtonItem créés avec customView
pour cela; Les objets UIBarButtonItem créés de manière régulière n'ont pas suffisamment d'informations exposées. Il est important que la trame soit recherchée après le parent UINavigationController UINavigationBar a complètement présenté tout son arbre de sous-vue. Pour la plupart des cas d'utilisation, le viewDidAppear
visible de UIViewController en est une assez bonne approximation.