【问题标题】:Add button overlay on UITableViewController with use static cells使用静态单元格在 UITableViewController 上添加按钮覆盖
【发布时间】:2017-11-29 07:55:19
【问题描述】:

我尝试用静态单元格UITableViewController上添加按钮叠加。但我得到了这个结果,按钮正在工作,但我没有看到搜索结果:

我正在尝试得到这个结果:

无论向上或向下滚动,我想按钮总是在底部。

在我的代码中,我使用框架 InstantSearch

import UIKit
import InstantSearch
import WARangeSlider

class SearchTableViewController: UITableViewController {

    @IBOutlet weak var resultButton: StatsButtonWidget!

    override func viewDidLoad() {
        super.viewDidLoad()

        resultButton.frame = CGRect(x: 0, y: 0, width: 150, height: 60)
        navigationController?.view.addSubview(resultButton)

        InstantSearch.shared.registerAllWidgets(in: self.view)

        LayoutHelpers.setupResultButton(button: resultButton)
        resultButton.addTarget(self, action: #selector(resultButtonClicked), for: .touchUpInside)

    }
}

如何在 UITableViewController 的底部添加 按钮叠加?我只需要使用 UITableViewController,而不是 UIViewController 和 TableView。

【问题讨论】:

  • 子类一个UIViewController,添加你的UITableViewController作为它的子视图控制器。您的子类应包含 UITableViewController.viewUIButton

标签: ios swift uitableview button


【解决方案1】:

您可以直接将按钮添加到UITableView而不使用AutoLayout,并确保TableView的delegate是控制器,例如:

override func viewDidLoad() {
    super.viewDidLoad()

    self.button.frame = CGRect(x: 0, y: self.tableView.frame.size.height - 50, width: self.tableView.frame.width, height: 50)
    self.tableView.addSubview(self.button)
    self.tableView.delegate = self
}

然后,您可以在 TableView 滚动时通过 UIScrollView 委托(继承自此的 UITableViewDelegate)修复按钮的位置:

public func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if (scrollView == self.tableView) {
        let originY = scrollView.frame.size.height - self.button.frame.size.height + scrollView.contentOffset.y
        self.button.frame = CGRect(x: 0, y: originY, width: scrollView.frame.width, height: self.button.frame.size.height)
    } 
}

或者,如果你想通过自动布局来定位按钮,只需定义一个NSLayoutConstraint 属性,并将其绑定到按钮的底部空间约束到其超级视图。然后通过scrollViewDidScroll函数中相同的机制调整约束的常数值。

【讨论】:

    【解决方案2】:

    您可以在表格视图的底部添加一个视图。

    override func viewDidLoad() {
        super.viewDidLoad()
        addResultButtonView()
    }
    
    private func addResultButtonView() {
        let resultButton = UIButton()
    
        resultButton.backgroundColor = .red
        resultButton.setTitle("Hello", for: .normal)
        tableView.addSubview(resultButton)
    
        // set position
        resultButton.translatesAutoresizingMaskIntoConstraints = false
        resultButton.leftAnchor.constraint(equalTo: tableView.safeAreaLayoutGuide.leftAnchor).isActive = true
        resultButton.rightAnchor.constraint(equalTo: tableView.safeAreaLayoutGuide.rightAnchor).isActive = true
        resultButton.bottomAnchor.constraint(equalTo: tableView.safeAreaLayoutGuide.bottomAnchor).isActive = true
        resultButton.widthAnchor.constraint(equalTo: tableView.safeAreaLayoutGuide.widthAnchor).isActive = true
        resultButton.heightAnchor.constraint(equalToConstant: 50).isActive = true // specify the height of the view
    }
    

    【讨论】:

      猜你喜欢
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      • 2016-10-22
      • 2015-08-01
      • 1970-01-01
      • 2011-10-16
      相关资源
      最近更新 更多