一://根据滑动慢慢改变frame
func scrollViewDidScroll(_ scrollView: UIScrollView){ guard isCommPush == true else { return } let contentOffsetY = scrollView.contentSize.height print("contentOffsetY:\(contentOffsetY)") //如果已经显示完毕了,就不再执行下面的方法,否则的话滑动的时候页面会一直上下抖动(改变再弹回来) guard (selectCommView?.bigViewHeight.constant)! < 44+contentOffsetY else{ return } // 向下滑动时<0,向上滑动时>0 let offsetY = scrollView.contentOffset.y print("offsetY:\(offsetY)") if offsetY > 0 { let changeHeight = 400+offsetY //70是可以显示的最上面的间距(就是选择小区框的下面) if changeHeight > ((selectCommView?.myObserVer?.view.frame.size.height)!-70) { selectCommView?.bigViewHeight.constant = (selectCommView?.myObserVer?.view.frame.size.height)!-70 //小于默认高度,显示默认高度 }else if changeHeight < 400 { selectCommView?.bigViewHeight.constant = 400+44 }else{ selectCommView?.bigViewHeight.constant = 44+changeHeight } } }
二:contenSize等于所有cell(内容)的size
1、在viewDidLoad中添加观察者
[self.tableView addObserver:self forKeyPath:@"contentSize" options:0 context:NULL];
2、重写observeValueForKeyPath方法,一旦UITableView的contentSize发生改变,就会调用这个方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { CGRect frame = self.tableView.frame; frame.size = self.tableView.contentSize; self.tableView.frame = frame; }