作者:余温 | 来源:互联网 | 2023-01-13 10:17
找到了董岩在这篇中型文章上的答案。
private let imageView = UIImageView(image: UIImage(named: "image_name"))
/// WARNING: Change these constants according to your project's design
private struct Const {
/// Image height/width for Large NavBar state
static let ImageSizeForLargeState: CGFloat = 40
/// Margin from right anchor of safe area to right anchor of Image
static let ImageRightMargin: CGFloat = 16
/// Margin from bottom anchor of NavBar to bottom anchor of Image for Large NavBar state
static let ImageBottomMarginForLargeState: CGFloat = 12
/// Margin from bottom anchor of NavBar to bottom anchor of Image for Small NavBar state
static let ImageBottomMarginForSmallState: CGFloat = 6
/// Image height/width for Small NavBar state
static let ImageSizeForSmallState: CGFloat = 32
/// Height of NavBar for Small state. Usually it's just 44
static let NavBarHeightSmallState: CGFloat = 44
/// Height of NavBar for Large state. Usually it's just 96.5 but if you have a custom font for the title, please make sure to edit this value since it changes the height for Large state of NavBar
static let NavBarHeightLargeState: CGFloat = 96.5
}
/**
Setup the image in navbar to be on the same line as the navbar title
*/
private func setupUI() {
navigationController?.navigationBar.prefersLargeTitles = true
title = "Large Title"
// Initial setup for image for Large NavBar state since the the screen always has Large NavBar once it gets opened
guard let navigatiOnBar= self.navigationController?.navigationBar else { return }
navigationBar.addSubview(imageView)
// setup constraints
imageView.layer.cornerRadius = Const.ImageSizeForLargeState / 2
imageView.clipsToBounds = true
imageView.translatesAutoresizingMaskIntoCOnstraints= false
NSLayoutConstraint.activate([
imageView.rightAnchor.constraint(equalTo: navigationBar.rightAnchor, constant: -Const.ImageRightMargin),
imageView.bottomAnchor.constraint(equalTo: navigationBar.bottomAnchor, constant: -Const.ImageBottomMarginForLargeState),
imageView.heightAnchor.constraint(equalToConstant: Const.ImageSizeForLargeState),
imageView.widthAnchor.constraint(equalTo: imageView.heightAnchor)
])
}
override func viewDidLoad() {
super.viewDidLoad()
// setup Settings navigation bar button
setupUI()
}
并且如果您要在导航到该视图控制器的子级时隐藏/显示图像,请执行以下操作:
/**
Show or hide the image from NavBar while going to next screen or back to initial screen
- parameter show: show or hide the image from NavBar
*/
private func showImage(_ show: Bool) {
UIView.animate(withDuration: 0.4) {
self.settingsImageView.alpha = show ? 1.0 : 0.0
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
showImage(false)
}
override func viewWillAppear(_ animated: Bool) {
super.viewDidAppear(animated)
showImage(true)
}
如果这对您有帮助,您可以查看实际文章并给作者鼓掌或两个
1> Sylvan D Ash..:
找到了董岩在这篇中型文章上的答案。
private let imageView = UIImageView(image: UIImage(named: "image_name"))
/// WARNING: Change these constants according to your project's design
private struct Const {
/// Image height/width for Large NavBar state
static let ImageSizeForLargeState: CGFloat = 40
/// Margin from right anchor of safe area to right anchor of Image
static let ImageRightMargin: CGFloat = 16
/// Margin from bottom anchor of NavBar to bottom anchor of Image for Large NavBar state
static let ImageBottomMarginForLargeState: CGFloat = 12
/// Margin from bottom anchor of NavBar to bottom anchor of Image for Small NavBar state
static let ImageBottomMarginForSmallState: CGFloat = 6
/// Image height/width for Small NavBar state
static let ImageSizeForSmallState: CGFloat = 32
/// Height of NavBar for Small state. Usually it's just 44
static let NavBarHeightSmallState: CGFloat = 44
/// Height of NavBar for Large state. Usually it's just 96.5 but if you have a custom font for the title, please make sure to edit this value since it changes the height for Large state of NavBar
static let NavBarHeightLargeState: CGFloat = 96.5
}
/**
Setup the image in navbar to be on the same line as the navbar title
*/
private func setupUI() {
navigationController?.navigationBar.prefersLargeTitles = true
title = "Large Title"
// Initial setup for image for Large NavBar state since the the screen always has Large NavBar once it gets opened
guard let navigatiOnBar= self.navigationController?.navigationBar else { return }
navigationBar.addSubview(imageView)
// setup constraints
imageView.layer.cornerRadius = Const.ImageSizeForLargeState / 2
imageView.clipsToBounds = true
imageView.translatesAutoresizingMaskIntoCOnstraints= false
NSLayoutConstraint.activate([
imageView.rightAnchor.constraint(equalTo: navigationBar.rightAnchor, constant: -Const.ImageRightMargin),
imageView.bottomAnchor.constraint(equalTo: navigationBar.bottomAnchor, constant: -Const.ImageBottomMarginForLargeState),
imageView.heightAnchor.constraint(equalToConstant: Const.ImageSizeForLargeState),
imageView.widthAnchor.constraint(equalTo: imageView.heightAnchor)
])
}
override func viewDidLoad() {
super.viewDidLoad()
// setup Settings navigation bar button
setupUI()
}
并且如果您要在导航到该视图控制器的子级时隐藏/显示图像,请执行以下操作:
/**
Show or hide the image from NavBar while going to next screen or back to initial screen
- parameter show: show or hide the image from NavBar
*/
private func showImage(_ show: Bool) {
UIView.animate(withDuration: 0.4) {
self.settingsImageView.alpha = show ? 1.0 : 0.0
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
showImage(false)
}
override func viewWillAppear(_ animated: Bool) {
super.viewDidAppear(animated)
showImage(true)
}
如果这对您有帮助,您可以查看实际文章并给作者鼓掌或两个