UIKit-UINavigationController

question

case:我想在一个stackView里面放到三个不同颜色的view(约束设置了wight:120,height:20),然后分别间隔10.然后通过navigationController来显示。我希望整个VC的大小根据stackView来变。
问题:发现通过preferredContentSize和view.systemLayoutSizeFitting总会多一点高度,从而导致因为stackView固定了间距10.直接强行将最后一个view的高度拉高了

override var preferredContentSize: CGSize {
        set {
            super.preferredContentSize = newValue
        }
        get {
            return stackView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize)
    }

stackView.distribution = .equalSpacing
在这里插入图片描述
stackView.distribution = .fill
在这里插入图片描述
最终应该改为

override var preferredContentSize: CGSize {
        set {
            super.preferredContentSize = newValue
        }
        get {
            let navBarHeight = navigationController?.navigationBar.bounds.height ?? 0
            print("preferredContentSize height:\(stackView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height),width:\(stackView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).width),navBarHeight:\(navBarHeight)")
            let fitSize = stackView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize)
            return CGSize(width: fitSize.width, height: fitSize.height - navBarHeight)
        }
    }

key:给UINavigationController的preferredContentSize需要减去navBarHeight,因为systemLayoutSizeFit获取的会包含navigationBarHeight,就需要减去这部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值