【问题标题】:Tableview subview overlaying UIView subclass表视图子视图覆盖 UIView 子类
【发布时间】:2019-03-12 07:46:43
【问题描述】:

我有一个 UIView 子类,它应该“浮动”在放置整个屏幕的 TableView 上方。 UIView 子视图在与 TableView 相同的 ViewController 中设置时正常显示。我试图让这个元素可重用,所以我把它移到了单独的 UIView 类中。现在 UIView 显示在 TableView 下方。实现bringSubviewToFront() 或sendSubviewToBack() 不起作用,没有任何改变。

这里是简化的代码:

UIView 类

 class SomeUIView: UIView {
    override init(frame: CGRect) {
    super.init(frame: frame)
    self.translatesAutoresizingMaskIntoConstraints = false
    self.addSubview(someUIView)
    setupSomeUIView() //autolayout.etc 
    }

    let someUIView: UIView = {
     //here goes customisation
     return UIView
    }

    func setupSomeUIView(){
      someUIView.translatesAutoresizingMaskIntoConstraints = false
      someUIView.leftAnchor.constraint(equalTo: self.safeAreaLayoutGuide.leftAnchor, constant: 7).isActive = true
      someUIView.topAnchor.constraint(equalTo: self.safeAreaLayoutGuide.topAnchor, constant: 10).isActive = true
      someUIView.rightAnchor.constraint(equalTo: self.safeAreaLayoutGuide.rightAnchor, constant: -7).isActive = true
      someUIView.bottomAnchor.constraint(equalTo: self.safeAreaLayoutGuide.topAnchor, constant: 63).isActive = true

    }

视图控制器

class ViewController: UIViewController {
     someTableView = UITableView()       

     someUIView: SomeUIView { return self.view as! SomeUIView}

     ovveride func viewDidLoad() {
     super.viewDidLoad()
     self.view = SomeUIView(frame: UIScreen.main.bounds)
     setupTableView()
     }

     func setupTableView() {
       view.addSubview(searchResultsTableView)
       someTableView.contentInset = UIEdgeInsets(top: 70, left: 0, bottom: 0, right: 0)
       someTableView.translatesAutoresizingMaskIntoConstraints = false
       someTableView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 40).isActive = true
       someTableView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 0).isActive = true
       someTableView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
       someTableView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
       someTableView.register(SomeCell.self, forCellReuseIdentifier: "cell")
}

我错过了什么?

【问题讨论】:

  • 您的someUIView 是添加tableView 的视图。那么,你怎么能期望它在层次结构中位于tableView 之上呢?它们不是某些视图的子视图。 tableViewSomeUIView 中的子视图。
  • 如何使 someUIView 成为主 viewcontroller 视图的子视图?

标签: ios swift uitableview uiview


【解决方案1】:

问题出在这一行:

self.view = SomeUIView(frame: UIScreen.main.bounds)

这是非法的。您不能在viewDidLoad 中更改视图控制器的主视图。

【讨论】:

  • 我该如何弥补?把它放在别的地方,还是我必须更改代码?
  • 你需要首先向我们展示真实的代码,而不是一百万年都无法编译的假垃圾,并为事物使用无意义的名称。然后我们将有一些工作。
  • 这里我只排除了 ViewControllers 扩展,其中类符合 TableViewDelegate 并且我处理单元格的数量......等等以及 UIView 的自定义。其余的都保持不变。我怎样才能让 SomeUIView 成为 ViewControllers 主视图的子视图,因为我想这就是重点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多