NSLayoutConstraint以编程方式添加,但视图在推回时消失

时间:2017-10-22 09:48:15

标签: ios autolayout

我正在使用Xcode 9和iOS 11。 我想在视图中动态添加横幅,调整最小视图的大小,为即将到来的横幅视图留出足够的空间......

我写了下面的代码,它的工作正常,非常好,因为它应该是。

显示横幅广告后,应用程序工作流程就会继续进行,因此用户可能会点击某处,并将新的UIViewController推送到导航堆栈。当用户返回放置横幅的上一个视图时,所有视图都消失了......没有更多的tableview和bannerView,只是一个空视图!

我无法理解为什么。想法? 我在控制台中没有自动布局错误...

在viewDidload()

中调用addBannerViewToView
func addBannerViewToView(_ bannerView: GADBannerView) {
    bannerView.translatesAutoresizingMaskIntoConstraints = false

    view.addSubview(bannerView)

    var tableView: UIView?
    var ttconstraint: NSLayoutConstraint?

    for constraint in view.constraints {
        if constraint.firstAnchor == bottomLayoutGuide.topAnchor {
            tableView = constraint.secondItem as? UIView
            ttconstraint = constraint
        }
    }

    debugPrint(ttconstraint!)
    NSLayoutConstraint.deactivate([ttconstraint!])

    print("LAST VIEW: \(tableView)")
    tableView?.translatesAutoresizingMaskIntoConstraints = false

    if #available(iOS 11.0, *) {
        NSLayoutConstraint.activate([
            bannerView.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant: 0),
            bannerView.heightAnchor.constraint(equalToConstant: bannerView.frame.height),

            tableView!.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 0),
            tableView!.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: 0),
            tableView!.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 0),
            tableView!.bottomAnchor.constraint(equalTo: bannerView.topAnchor, constant: 0),
            bannerView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: 0),
            ])
    } else {
        // Fallback on earlier versions
    }

}

0 个答案:

没有答案