底部视图不显示在 ToolbarController swift 3

Bottom View does not show in ToolbarController swift 3

我在 swift 中使用 cosmicmind 的 ToolbarController of Material Framework 3. 我在这个控制器中有两个 UIView,一个在屏幕顶部,另一个在屏幕底部。底部 UIView 不显示在控制器中。我认为它会向下移动到屏幕之外的视图。

这个问题是在真机测试时出现的。其他模拟器显示正确的行为。

import UIKit
import Material

class RootViewController: UIViewController {
  open override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = Color.white
    prepareToolbar()
    handleTopView()
    handleBottomView()
  }

  func handleTopView() {
    let topView = UIView()
    topView.frame = CGRect(x: 0.00, y: 0.00, width: view.frame.size.width, height: 40.00)
    topView.backgroundColor = UIColor.gray
    view.addSubview(topView)
  }

  func handleBottomView() {
    let bottomView = UIView()
    bottomView.frame = CGRect(x: 0.00, y: self.view.frame.size.height, width: view.frame.size.width, height: 40.00)
    bottomView.backgroundColor = UIColor.blue
    view.addSubview(bottomView)
  }
}

extension RootViewController {
    fileprivate func prepareToolbar() {
      guard let toolbar = toolbarController?.toolbar else {
        return
      }

      toolbar.title = "Material"
      toolbar.titleLabel.textColor = .white
      toolbar.titleLabel.textAlignment = .left

      toolbar.detail = "Build Beautiful Software"
      toolbar.detailLabel.textColor = .white
      toolbar.detailLabel.textAlignment = .left
    }
 }

问题是您在 viewDidLoad 函数中进行帧计算,而这些计算没有考虑 ToolbarController 计算,因为在 ToolbarController 的构造点 RootViewController没有连接,是作为参数传入的,是在viewDidLoad方法调用之后。您可以使用 Material 中的 Layout API 来动态计算视图的位置,例如更新后的代码如下所示:

import UIKit
import Material

class RootViewController: UIViewController {
    open override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = Color.white
        prepareToolbar()
        handleTopView()
        handleBottomView()
    }

    func handleTopView() {
        let topView = UIView()
        topView.backgroundColor = UIColor.gray
        view.layout(topView).top().horizontally().height(40)
    }

    func handleBottomView() {
        let bottomView = UIView()
        bottomView.backgroundColor = UIColor.blue
        view.layout(bottomView).bottom().horizontally().height(40)
    }
}

extension RootViewController {
    fileprivate func prepareToolbar() {
        guard let toolbar = toolbarController?.toolbar else {
            return
        }

        toolbar.title = "Material"
        toolbar.titleLabel.textColor = .white
        toolbar.titleLabel.textAlignment = .left

        toolbar.detail = "Build Beautiful Software"
        toolbar.detailLabel.textColor = .white
        toolbar.detailLabel.textAlignment = .left
    }
}

我测试过这适用于最新的 ToolbarController sample project

祝一切顺利:)