Пользовательская панель навигации в iOS Swift - PullRequest
0 голосов
/ 02 октября 2018

Я создаю пользовательскую панель навигации в swift для каждого экрана.Я вызываю эту функцию на viewWillAppear во время первой загрузки, она идет правильно, если Экран первой загрузки .Я перехожу на другой экран, он меняется. Следующий экран просмотра навигации по заголовку смещен .если я вернулся к предыдущему экрану, то он также был сдвинут введите описание изображения здесь .Я не могу найти ошибку, где код был неправильным. Левые и правильные элементы навигации размещаются нормально.Но navigationtitle представление только смещается.

extension UIViewController {      
func reightMenuItems(_ isMenuBtn: Bool, _ navigationItem:UINavigationItem) {
    if isMenuBtn {
        let leftView = UIView()
        leftView.backgroundColor = .clear
        leftView.frame = CGRect(x: 0, y: 0, width: 40, height: 44)
        let menuImage = UIImageView(image:#imageLiteral(resourceName: "MenuIcon"))
        menuImage.contentMode = .scaleAspectFit
        menuImage.frame = CGRect(x: 2.5, y: 6, width: 35, height: 32)
        leftView.addSubview(menuImage)



        let followButton = UIButton(type: .system)
        followButton.frame = CGRect(x: 0, y: 0, width: 40, height: 44)
        followButton.contentEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0)
        followButton.addTarget(self, action: #selector(self.btnClickMenu), for: .touchUpInside)

        leftView.addSubview(followButton)
        navigationItem.leftBarButtonItems = [UIBarButtonItem(customView: leftView)]
    }else{
        let leftView = UIView()
        leftView.backgroundColor = .clear
        leftView.frame = CGRect(x: 0, y: 0, width: 40, height: 44)

        let menuImage = UIImageView(image:#imageLiteral(resourceName: "arrow_white-left"))
        menuImage.contentMode = .scaleToFill
        menuImage.frame = CGRect(x: 12.5, y: 10.5, width: 15, height: 25)
        leftView.addSubview(menuImage)

        let followButton = UIButton(type: .system)
        followButton.frame = CGRect(x: 0, y: 0, width: 40, height: 44)

        leftView.addSubview(followButton)
        followButton.addTarget(self, action: #selector(self.btnClickBack), for: .touchUpInside)
        navigationItem.leftBarButtonItems = [UIBarButtonItem(customView: leftView)]
    }
}

fileprivate func leftMenuItems(_ isCart: Bool, _ navigationItem: UINavigationItem) {
    //lecftButtons
    if isCart  {
        let reightView = UIView()
        reightView.backgroundColor = .clear
        reightView.frame = CGRect(x: 0, y: 0, width: 40, height: 44)

        let menuImage = UIImageView(image:#imageLiteral(resourceName: "Cart"))
        menuImage.contentMode = .scaleToFill
        menuImage.frame = CGRect(x: 2.5, y: 6, width: 35, height: 34)
        reightView.addSubview(menuImage)

        let cartBtn = UIButton(type: .system)
        cartBtn.frame = CGRect(x: 0, y: 0, width: 40, height: 44)

        reightView.addSubview(cartBtn)
        cartBtn.addTarget(self, action: #selector(self.btnClickCart), for: .touchUpInside)
        navigationItem.rightBarButtonItems = [UIBarButtonItem(customView: reightView)]
    }else{
        let composeButton = BtnFontBold20()
        composeButton.setTitle("Done", for: .normal)
        composeButton.titleLabel?.textColor = .white
        composeButton.frame = CGRect(x: 0, y: 00, width: 34, height: 44)
        composeButton.contentEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0)
        composeButton.addTarget(self, action: #selector(self.btnClickCart), for: .touchUpInside)
        navigationItem.rightBarButtonItems = [UIBarButtonItem(customView: composeButton)]
    }
}

func setupNavItems(_ navigationItem: UINavigationItem , day:String = "",address:String = "",type:Int,isMenuBtn:Bool,isCart:Bool,title:String = "") {

    //NavigationItem
    self.navigationController?.isNavigationBarHidden = false
    self.navigationController?.navigationBar.isTranslucent = false
    self.navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")
    //Shadow
    self.navigationController?.navigationBar.layer.shadowOffset = CGSize(width: 1.5, height: 1.5)
    self.navigationController?.navigationBar.layer.shadowRadius = 2.0
    self.navigationController?.navigationBar.layer.shadowOpacity = 0.5

    //reight Menu Items
    reightMenuItems(isMenuBtn, navigationItem)
    leftMenuItems(isCart, navigationItem)

    let height = navigationController?.navigationBar.frame.height ?? 0
    let leftButtonWidth: CGFloat = 90 // left padding
    let width2 = AppConstants.screenWidth - leftButtonWidth
    print(width2)
    let Titleview = UIView(frame: CGRect(x: 0, y: 0, width: width2, height: height))
      Titleview.backgroundColor = .clear
      navigationItem.titleView = Titleview
    if type == 1 {
        let dayLbl = FontBold18(frame: CGRect(x: 0, y: 0, width: min(width2/2,40), height: height))
         dayLbl.text = day
        dayLbl.textColor = .white
        dayLbl.textAlignment = .left
        dayLbl.numberOfLines = 1
        Titleview.addSubview(dayLbl)



        let DirectImag = UIImageView()
        DirectImag.contentMode = .scaleAspectFit
        DirectImag.image = #imageLiteral(resourceName: "RightDirection")
        Titleview.addSubview(DirectImag)
        DirectImag.translatesAutoresizingMaskIntoConstraints = false
        DirectImag.widthAnchor.constraint(equalToConstant: 15).isActive = true
        DirectImag.heightAnchor.constraint(equalToConstant: 15).isActive = true
        DirectImag.leadingAnchor.constraint(equalTo: dayLbl.trailingAnchor, constant:5).isActive = true
        DirectImag.centerYAnchor.constraint(equalTo: dayLbl.centerYAnchor).isActive = true


        let dayBtn = UIButton(type: .system)
        dayBtn.addTarget(self, action: #selector(self.btnClickASAPType), for: .touchUpInside)
        Titleview.addSubview(dayBtn)
        dayBtn.translatesAutoresizingMaskIntoConstraints = false
        dayBtn.centerYAnchor.constraint(equalTo: dayLbl.centerYAnchor).isActive = true
        dayBtn.centerXAnchor.constraint(equalTo: dayLbl.centerXAnchor, constant: 0).isActive = true
        dayBtn.heightAnchor.constraint(equalTo: dayLbl.heightAnchor).isActive = true
        dayBtn.widthAnchor.constraint(equalTo: dayLbl.widthAnchor , constant:25).isActive = true



        let addLbl = FontBold18()
        addLbl.textColor = .white
        addLbl.textAlignment = .left
        addLbl.numberOfLines = 1
        Titleview.addSubview(addLbl)
        addLbl.text = address
        addLbl.translatesAutoresizingMaskIntoConstraints = false
        addLbl.leadingAnchor.constraint(equalTo: DirectImag.trailingAnchor,constant:5).isActive = true
        addLbl.heightAnchor.constraint(equalToConstant: height).isActive = true
        addLbl.centerYAnchor.constraint(equalTo: Titleview.centerYAnchor).isActive = true
        addLbl.widthAnchor.constraint(lessThanOrEqualToConstant: (width2 - dayLbl.frame.width) * 0.9).isActive = true

        let downImag = UIImageView()
        downImag.contentMode = .scaleAspectFit
        downImag.image = #imageLiteral(resourceName: "down-arrow-white")
        Titleview.addSubview(downImag)
        downImag.translatesAutoresizingMaskIntoConstraints = false
        downImag.widthAnchor.constraint(equalToConstant: 15).isActive = true
        downImag.heightAnchor.constraint(equalToConstant: 15).isActive = true
        downImag.leadingAnchor.constraint(equalTo: addLbl.trailingAnchor, constant:5).isActive = true
        downImag.centerYAnchor.constraint(equalTo: addLbl.centerYAnchor).isActive = true


        let addressBtn = UIButton(type: .system)
        addressBtn.backgroundColor = .clear
        addressBtn.addTarget(self, action: #selector(self.btnClickAddress), for: .touchUpInside)
        Titleview.addSubview(addressBtn)
        addressBtn.translatesAutoresizingMaskIntoConstraints = false
        addressBtn.centerYAnchor.constraint(equalTo: addLbl.centerYAnchor).isActive = true
        addressBtn.leadingAnchor.constraint(equalTo: addLbl.leadingAnchor, constant: 0).isActive = true
        addressBtn.heightAnchor.constraint(equalTo: addLbl.heightAnchor).isActive = true
        addressBtn.widthAnchor.constraint(equalTo: addLbl.widthAnchor).isActive = true

    }
    else if type == 2{
        let dayLbl = FontBold18()
        dayLbl.text = title
        dayLbl.textColor = .white
        dayLbl.textAlignment = .center
        dayLbl.numberOfLines = 1
        Titleview.addSubview(dayLbl)
        dayLbl.translatesAutoresizingMaskIntoConstraints = false
        dayLbl.centerXAnchor.constraint(equalTo: Titleview.centerXAnchor).isActive = true
        dayLbl.centerYAnchor.constraint(equalTo: Titleview.centerYAnchor).isActive = true
    }

}

@objc func btnClickASAPType()  {
    print("DayExt")
   // self.overriderFunc()
}
 @objc func btnClickAddress()  {
    print("AddressExt")
}
@objc  func btnClickCart()  {
    print("CartExt")
}
@objc func btnClickMenu()  {
    print("MenuExt")

}
@objc func btnClickBack()  {
    print("backExt")
    self.navigationController?.popViewController(animated: true)
}

}

вызывает метод setupNavigation в viewDidLoad

 self.setupNavItems( self.navigationItem, day:"Today", address:"Jayanagar 4th Block", type: 1,isMenuBtn: false,isCart: true) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...