iOS 11 scroll滚动偏移,tableview偏移44,获取view的宽和高


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, 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)

    }

  

原文地址:https://www.cnblogs.com/qingzZ/p/9243258.html