【问题标题】:uiview over uinavigationcontrolleruiview over uinavigationcontroller
【发布时间】:2020-06-17 17:27:13
【问题描述】:

在导航控制器下添加 uiview 时出现问题。为什么我的 uiview 在 uinavigationcontroller 之上,我想在 navigationController 下添加我的 uiview。 这是我的代码。

let slideView = UIView()

view.backgroundColor = .white
        navigationItem.title = "Absensi"
        navigationController?.navigationBar.prefersLargeTitles = true
        navigationController?.navigationBar.barTintColor = .white
        navigationController?.navigationBar.shadowImage  = UIImage()
        navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedString.Key.font: UIFont(name: "NunitoSans-SemiBold", size: 20)]
        navigationItem.leftBarButtonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "ic-back-line").withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(handleBack))


view.addSubview(slideView)
        slideView.backgroundColor = .red
        slideView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            slideView.topAnchor.constraint(equalTo: view.topAnchor),
            slideView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            slideView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            slideView.heightAnchor.constraint(equalToConstant: 80)
        ])

【问题讨论】:

  • 尝试改变约束如下:slideView.safeAreaLayoutGuide.topAnchor.constraint(equalTo: view.topAnchor)
  • 嘿,它工作,谢谢。我在想即使没有 safeArea @OnkarK,它也应该可以工作
  • view.sendSubviewToBack(slideView)
  • 设置navigationController?.navigationBar.isTranslucent = false

标签: ios swift uiview uinavigationcontroller


【解决方案1】:

针对安全区域设置约束。

【讨论】:

    【解决方案2】:

    您应该将 topAnchor 添加到安全区域 -> view.safeAreaLayoutGuide.topAnchor

    NSLayoutConstraint.activate([
        slideView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
        slideView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
        slideView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
        slideView.heightAnchor.constraint(equalToConstant: 80)
    ])
    

    【讨论】:

      【解决方案3】:

      尝试使用框架而不是约束..这段代码应该可以工作

        override func viewDidAppear(_ animated: Bool) {
              let slideView = UIView(frame: CGRect(x: 0, y:
                  navigationController?.navigationBar.frame.height ?? 0 + 20 ,width: UIScreen.main.bounds.width, height: 80))
      
              slideView.backgroundColor = .red
              slideView.translatesAutoresizingMaskIntoConstraints = false
      
              view.backgroundColor = .white
              navigationItem.title = "Absensi"
              navigationController?.navigationBar.prefersLargeTitles = true
              navigationController?.navigationBar.barTintColor = .white
              navigationController?.navigationBar.shadowImage  = UIImage()
              navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedString.Key.font: UIFont(name: "NunitoSans-SemiBold", size: 20)]
              navigationItem.leftBarButtonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "ic-back-line").withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(handleBack))
      
              view.addSubview(slideView)            
        }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-30
        相关资源
        最近更新 更多