重新启动应用程序后,导航栏标题被截断



最近我收到一个连线问题

当我从XCode导航运行我的应用程序时,标题文本显示完美。但是,当我关闭应用程序并再次重新打开时,文本会被切断

。。。

我试过以下问题,但没有成功。

这是我的BaseViewController

import UIKit
import SnapKit
open class BaseViewController: UIViewController {
public lazy var navigationShadowView: UIView = {
let view = UIView()
DispatchQueue.main.async {
let gradientLayer = CAGradientLayer()
gradientLayer.colors = [UIColor.Blue10.cgColor, UIColor.Blue0.withAlphaComponent(0.0).cgColor]
gradientLayer.frame = view.bounds
view.layer.addSublayer(gradientLayer)
}
return view
}()
public override func viewDidLoad() {
loadDefaults()
setupUI()
}
}
extension BaseViewController {
private func loadDefaults() {
view.backgroundColor = .white
tabBarController?.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
// MARK: Navigation bar bottom shadow
view.addSubview(navigationShadowView)
navigationShadowView.snp.makeConstraints { make in
make.top.equalTo(view.safeAreaLayoutGuide.snp.top)
make.leading.equalTo(view.snp.leading)
make.trailing.equalTo(view.snp.trailing)
make.height.equalTo(10)
}
}
@objc open func setupUI() {
}
}

我在viewcontroller中填充视图,如下

import UIKit
import CoreModule
import SnapKit
import Combine
class CustomerProjectListVC: BaseViewController {
lazy var refreshControl: UIRefreshControl = {
let refresh = UIRefreshControl()
refresh.addTarget(self, action: #selector(refreshProjects(_:)), for: .valueChanged)
return refresh
}()
lazy var jobsTableView: UITableView = {
let tableView = UITableView()
tableView.showsHorizontalScrollIndicator = false
tableView.showsVerticalScrollIndicator = false
tableView.separatorStyle = .none
tableView.rowHeight = 220
tableView.backgroundColor = .Blue0
tableView.addSubview(refreshControl)
tableView.register(ProjectListTableViewCell.self, forCellReuseIdentifier: ProjectListTableViewCell.identifier)
tableView.dataSource = self
tableView.delegate = self
return tableView
}()
private let viewModel = CustomerProjectListViewModel()
private var subscription = Set<AnyCancellable>()
override func viewDidAppear(_ animated: Bool) {
tabBarController?.navigationItem.title = "Project List"
tabBarController?.navigationItem.rightBarButtonItem = nil
}
override func setupUI() {
view.addSubview(jobsTableView)
jobsTableView.snp.makeConstraints { make in
make.top.equalTo(view.safeAreaLayoutGuide.snp.top)
make.leading.equalToSuperview()
make.trailing.equalToSuperview()
make.bottom.equalToSuperview()
}
populateData()
}
}

这是自定义选项卡控制器

class CustomerTabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
tabBar.backgroundColor = .white
viewControllers = [
createNavController(for: sideMenuController(), title: "Home", image: UIImage(named: .TabBarHome)!),
createNavController(for: ProfileVC(), title: "Profile", image: UIImage(named: .TabBarProfile)!),
createNavController(for: NewPostVC(), title: "Post", image: UIImage(named: .TabBarPost)!),
createNavController(for: CustomerProjectListVC(), title: "Chatbox", image: UIImage(named: .TabBarChatBox)!),
createNavController(for: HomeVC(), title: "Notification", image: UIImage(named: .TabBarNotification)!)
]
}
}
extension CustomerTabBarController {
fileprivate func createNavController(for rootViewController: UIViewController,
title: String,
image: UIImage) -> UIViewController {
rootViewController.tabBarItem.title = title
rootViewController.tabBarItem.image = image
return rootViewController
}
}
extension CustomerTabBarController {
private func configureSideMenu() {
SideMenuController.preferences.basic.menuWidth = UIScreen.main.bounds.width - 80
SideMenuController.preferences.basic.position = .above
SideMenuController.preferences.basic.direction = .right
}
private func sideMenuController() -> SideMenuController {
configureSideMenu()
return SideMenuController(contentViewController: HomeVC(), menuViewController: SideMenuVC())
}
}

我正在启动视图控制器,就像下面的一样

let viewController = CustomerTabBarController()
let navigationViewController = UINavigationController(rootViewController: viewController)
window?.rootViewController = navigationViewController
window?.makeKeyAndVisible()

重新启动应用后导航栏缩小

导航栏标题截断

我在这里附上了一些截图。

以下是从XCode 启动

https://pasteboard.co/HHl1vFJYbzeX.png

第二个是在重新启动之后

https://pasteboard.co/kw3zRZqic9q7.png

我的问题是,为什么从XCode运行时不会发生这种情况,而是在应用程序重新启动时发生。我已经尝试了很多方法,比如viewdidapear方法和其他方法中的setupui。但运气不好。请帮帮我。

您似乎设置了一个错误的视图控制器的标题,还值得检查您是否有正确的导航层次结构。我最希望这是造成问题的原因。

基于选项卡的应用程序的典型层次结构如下:UITabBarController(根(→UINavigationController(每个选项卡一个(→YourViewController。

现在,我看到您将导航标题设置如下:

tabBarController?.navigationItem.title = "Project List"

这很奇怪,也很不寻常。视图控制器应该设置自己的标题,如下所示:

navigationItem.title = "Project List"

然后它的父UINavigationController将能够使用此标题。同样值得在viewDidLoad中设置标题,而不是在viewDidAppear中设置,以便标题在过渡动画之前可见,而不是之后可见。

因此,请检查应用程序中视图控制器的层次结构,并确保每个视图控制器只设置自己的导航标题。

如果这没有帮助,我会很乐意收回我的答案以避免混淆。

最新更新