在pushViewController时禁用导航栏透明度

时间:2018-07-15 12:28:59

标签: ios swift uinavigationcontroller uinavigationbar

我在NavigationController中嵌入了TableViewController,也有在选择TableViewController中的单元格时应打开的DetailsViewController。

所以我打电话

override func viewDidLoad() {
    super.viewDidLoad()
    let circularPath = UIBezierPath(arcCenter: CGPoint.zero, radius: beginButton.bounds.midX, startAngle: -CGFloat.pi / 2, endAngle: 2 * .pi, clockwise: true)

    pulsatingLayer.path = circularPath.cgPath
    pulsatingLayer.strokeColor = UIColor.clear.cgColor
    pulsatingLayer.lineWidth = 10
    pulsatingLayer.fillColor = UIColor.red.cgColor
    pulsatingLayer.lineCap = kCALineCapRound

    let pulsatingView = UIView(frame: .zero)
    view.addSubview(pulsatingView)
    view.bringSubview(toFront: beginButton)

    // use Auto Layout to place the new pulsatingView relative to the button
    pulsatingView.translatesAutoresizingMaskIntoConstraints = false
    pulsatingView.leadingAnchor.constraint(equalTo: beginButton.centerXAnchor).isActive = true
    pulsatingView.topAnchor.constraint(equalTo: beginButton.centerYAnchor).isActive = true

    pulsatingView.layer.addSublayer(pulsatingLayer)
    animatePulsatingLayer()
}

我的导航栏设置:

navigationController?.pushViewController(DetailedViewController, animated: true)

DetailedViewController的导航栏被隐藏

navigationController?.navigationBar.isTranslucent = false
navigationController?.navigationBar.barTintColor = .green

当我看到将动画从TableViewController推送到DetailedViewController时,我可以看到Controller的一些内容,尽管导航栏对于此过渡而言是透明的,但它仍位于TableViewController后面。

我该怎么办?

1 个答案:

答案 0 :(得分:-1)

这是编译器的未定义行为,您可以通过以下操作实现目标。

1)选择导航控制器->导航栏。 2)取消选中半透明属性。 (请参阅编辑器窗格)。 3)同时从情节提要中隐藏导航栏。 4)在需要的地方在视图控制器中显示导航栏。

//显示导航栏的代码:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    self.navigationController?.navigationBar.isHidden = false
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(true)
    self.navigationController?.navigationBar.isHidden = true
}