1. tableview 的头部 有44的偏移量
1>.设置 tableview的 属性 tableView.scrollIndicatorInsets = UIEdgeInsets.zero
self.translatesAutoresizingMaskIntoConstraints = false
if #available(iOS 11.0, *) {
tableView.contentInsetAdjustmentBehavior = .never
} else {
// Fallback on earlier versions
} 2>.在控制器设置属性
self.edgesForExtendedLayout = UIRectEdge(rawValue: 0)
if #available(iOS 11.0, *) {
extendedLayoutIncludesOpaqueBars = true
}else{
automaticallyAdjustsScrollViewInsets = false
}
2.获取VFL自定义view的宽和高
func sizeToFitForView(temView:UIView) -> (height:CGFloat, width:CGFloat){
temView.setNeedsLayout()
temView.layoutIfNeeded()
let height = temView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
let width = temView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).width
return (height, width)
}
3.VFL自定义tableview的headerView 获取宽和高
override func layoutSubviews() {
super.layoutSubviews()
sizeHeaderToFit()
}
/// 重置 tableview的header的frame
private func sizeHeaderToFit() {
//FIXME: 这里一定要用过滤,不然会得到默认自带的headerView,高度还不可控
guard let headerView = tableView.tableHeaderView else { return }
headerView.setNeedsLayout()
headerView.layoutIfNeeded()
let height = headerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
var frame = headerView.frame
frame.size.height = height
headerView.frame = frame
tableView.tableHeaderView = headerView
}
4.如果用VFL 设置 ScrollView约束子视图 宽度 给一个固定值 子视图高度 加上底部约束 就不用设置 contentsize
/// 添加ScrollView的子控件 func setScrollVSubviews(){ let vd : [String : UIView] = ["discountView":discountView, "shopInfoView": shopInfoView, "itemsView":itemsView, "employeesInfoView":employeesInfoView] vd.fastAddToView(scrollV) scrollV.fastAddConstraints("|[discountView(\(JY_DEVICE_WIDTH))]", vd) scrollV.fastAddConstraints("|[shopInfoView(\(JY_DEVICE_WIDTH))]", vd) scrollV.fastAddConstraints("|[itemsView(\(JY_DEVICE_WIDTH))]", vd) scrollV.fastAddConstraints("|[employeesInfoView(\(JY_DEVICE_WIDTH))]", vd) scrollV.fastAddConstraints("V:|[discountView][shopInfoView][itemsView][employeesInfoView]|", vd) }