我有一个高度为100像素的UIView,它位于我的UITableView之上。当我向上滚动时,我希望UIView与我的UITableView一起滚动,就好像它是它的一部分一样。当我的UIView的50个像素被隐藏而不能向上滚动时,我想在我继续向上滚动的同时将UIView固定在顶部。怎么能实现这一目标?我尝试使用更改我的UIView的顶级NSLayoutConstraint常量等于我的tableview的内容偏移量,但它们不会以相同的速度滚动。
答案 0 :(得分:4)
首先确保您的tableView为grouped
:
self.tableView = UITableView(frame: CGRect(x: 0, y: (self.navigationController?.navigationBar.frame.maxY)!, width: self.view.bounds.size.width, height: (self.view.bounds.size.height - (self.navigationController?.navigationBar.frame.maxY)!)), style: .grouped)
self.tableView.delegate = self
self.tableView.dataSource = self
self.view.addSubview(self.tableView)
然后您需要将UIView
添加到subview
的{{1}}中:
tableView
为tableView的第一部分添加一个高度为100的标题,以便您的单元格位于正确的位置:
self.myView = UIView()
self.myView.backgroundColor = UIColor.green
self.myView.frame = CGRect(x: 0, y: 0, width: self.view.bounds.size.width, height: 100)
self.tableView.addSubview(self.myView)
滚动时调整func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 100
}
的框架:
UIView
演示:
答案 1 :(得分:2)
如果我理解你正确提问,你可以通过实施这样的表格查看scrollViewDidScroll:
方法来实现这个目标
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
static CGFloat previousOffset;
CGRect rect = self.yourUIView.frame;
//NSLog you'r UIView position before putting any condition
// NSLog(@"Origin %f",rect.origin.y);
rect.origin.y += previousOffset - scrollView.contentOffset.y;
previousOffset = scrollView.contentOffset.y;
//assuming you'r UIView y position starts from 0
//Before setting the condition please make sure to run without any
//condition if not working
if(rect.origin.y>=-50 && rect.origin.y<=0){
self.yourUIView.frame = rect;
}
}
希望它有所帮助...
答案 2 :(得分:0)
你需要的是为你的tableView实现viewForHeader inSection
方法(记得让你的ViewController实现tableviewDelegate协议),一旦你得到它,你应该将tableViewStyle设置为UITableViewStylePlain
如果您对更多帮助感兴趣,请分享您的代码。
答案 3 :(得分:0)
我在
上遇到了同样的问题navigationItem.largeTitleDisplayMode = .always
navigationBar.prefersLargeTitles = true
和
tableView.contentInset = UIEdgeInsets(top: 40, left: 0, bottom: 0, right: 0)
对我来说,上述任何选项都无济于事,但我意识到您可以致电
tableView.setContentOffset(CGPoint(x: 0, y: -tableView.contentInset.top), animated: false)
viewDidload()
中的问题消失了! :)
完全忘记了这种方法,花了太多时间进行这种令人毛骨悚然的行为。
祝你好运!