我尝试使用静态单元格在 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,而不是使用带有TableView的UIViewController。
答案 0 :(得分:2)
您可以直接将按钮添加到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)
}
}
或者,如果您想通过AutoLayout定位按钮,只需定义一个NSLayoutConstraint
属性,并将其绑定到按钮的底部空间约束到其超级视图。然后通过scrollViewDidScroll
函数中的相同机制调整约束的常量值。
答案 1 :(得分:1)
您只需在桌面视图的底部添加一个视图即可。
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
}