Я наконец-то поставил на панель навигации свой собственный вид в точности так, как я хотел, состоящий из изображения и имени пользователя, например, Whatsapp, конечно, этот вид имеет автоматическое расположение, поэтому не имеет значения ширина текста, которая будет адаптироваться, но если текст длиннее, вот что происходит:
Это код из моего пользовательского просмотра, который я хочу установить как leftBarButtonItem.
class NavView: UIView {
@IBOutlet private weak var principalView: UIView!
@IBOutlet private weak var principalImage: UIImageView!
@IBOutlet private weak var nameLabel: UILabel!
class func instanceFromNib() -> UIView {
return UINib(nibName: "NavView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView
}
override init(frame: CGRect) {
super.init(frame: frame)
self.setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setup()
}
func setup() {
self.principalView = loadViewFromNib()
self.principalView.autoresizingMask = [UIView.AutoresizingMask.flexibleWidth,
UIView.AutoresizingMask.flexibleHeight]
self.principalView.translatesAutoresizingMaskIntoConstraints = true
addSubview(principalView)
}
func loadViewFromNib() -> UIView! {
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: String(describing: type(of: self)), bundle: bundle)
let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
return view
}
public func setImage(withName name: String) {
self.principalImage.image = UIImage(named: name)
self.principalImage.layer.borderColor = UIColor.black.cgColor
self.principalImage.layer.borderWidth = 1
self.principalImage.layer.cornerRadius = self.principalImage.frame.width / 2
self.principalImage.clipsToBounds = true
}
public func setUser(name: String) {
self.nameLabel.text = name
}
}
Чтобы поместить его на панель навигации, я просто установил этот код на моем ViewController (ширина не имеет значения, потому что он будет обновляться в зависимости от текста).
override func viewDidLoad() {
super.viewDidLoad()
self.setNavBar()
}
func setNavBar() {
let backButton = UIBarButtonItem(image: #imageLiteral(resourceName: "ico_arrow_left.png"), style: .plain, target: self, action: #selector(goBack(_:)))
let customNavBar = NavView(frame: CGRect(x: 0, y: 0, width: 44.0, height: 44.0))
customNavBar.setImage(withName: "picture2")
customNavBar.setUser(name: "My really long long long long name")
navigationItem.leftBarButtonItems = [backButton,UIBarButtonItem.init(customView: customNavBar)]
}
Мне нужно установить максимальную ширину, чтобы избежать этой ошибки, когда текст слишком велик, это должно произойти:
Но не происходит.