神奇的navigationBar.translucent

初步实践所得:
当translucent属性为YES的时候,vc的view的坐标从导航栏的左上角开始;
当translucent属性为NO的时候,vc的view的坐标从导航栏的左下角开始;
 
深入探究:
 
内容简要摘要:
(一)非滚动实图
从iOS7以后,默认为YES。
为YES时,view从(0,0)点开始;
为NO时,view从(0,64)点开始。
 
(二)滚动视图
tableview加在view上面,坐标为(0,0,屏宽,屏高)。
 
当为YES时,view的起点从(0,0)开始,tableview的起点从view的(0,0)点开始,但是tableview的内容向下偏移了64,这就是特性。
当然,也可以让这种特性消失,tableview有一个特有的属性,automaticallyAdjustsScrollViewInsets,默认为YES,滚动试图会默认进行调整,如果设置为NO,则不进行自动调整。
 
当为NO时,view的起点从(0,64)开始,tableview的起点从view的(0,0)点开始,nav的透明效果没有了,变为纯白色。这样如果增加侧滑手势的话,就会导致上面的navigationBar消失,显示后面的黑色背景,这显然不是我们想要的。
 
【总结】当我们使用滚动视图的时候,建议不要修改translucent属性,就是系统默认的YES。
 
【类似属性】
设置self.edgesForExtendedLayout = UIRectEdgeNone;控制器的view也会变成从(0,64)开始。这样做nav会变得略黑色,目测是背面window的颜色。 

转载于:https://www.cnblogs.com/cchHers/p/8712082.html

private lazy var scrollView: DeviceListMasterMultiResponseScrollView = { guard !showLocalDeviceOnly else { return DeviceListMasterMultiResponseScrollView() } let top: CGFloat = navigationController?.navigationBar.frame.maxY ?? 0 let bottom: CGFloat = self.tabBarController?.tabBar.bounds.height ?? 0 let width = self.view.bounds.width // ✅ 动态获取当前视图宽度(横屏/竖屏都正确) let height = screenHeight - top - bottom let scrollView = DeviceListMasterMultiResponseScrollView(frame: CGRect(x: 0, y: top, width: width, height: height)) scrollView.bounces = false scrollView.isScrollEnabled = true scrollView.allowPanDownToShowSearchBar = allowPanDownToShowSearchBar scrollView.showsVerticalScrollIndicator = false scrollView.delegate = self scrollView.backgroundColor = .clear scrollView.contentInset = UIEdgeInsets.zero scrollView.contentSize = CGSize(width: width, height: scrollView.frame.height + nameLabelViewHeight + 62) // 注意这里也要用 width scrollView.addSubview(scrollViewContainerView) return scrollView }() private lazy var scrollViewContainerView: UIView = { guard !showLocalDeviceOnly else { return UIView() } if tabBarContainerTopConstraint != nil { tabBarContainerTopConstraint.constant = nameLabelViewHeight } let top: CGFloat = navigationController?.navigationBar.frame.maxY ?? 0 let bottom: CGFloat = self.tabBarController?.tabBar.bounds.height ?? 0 let width = self.view.bounds.width // ✅ 同样动态获取当前宽度 let scrollViewContainerView = UIView(frame: CGRect(x: 0, y: 0, width: width, height: screenHeight - top - bottom)) scrollViewContainerView.backgroundColor = .clear scrollViewContainerView.addSubview(headerSearchView) scrollViewContainerView.addSubviews([tabBarContainer]) headerSearchView.snp.makeConstraints { make in make.top.equalToSuperview().offset(10) make.height.equalTo(62) make.leading.trailing.equalToSuperview() } tabBarContainer.snp.makeConstraints({make in make.top.equalTo(headerSearchView.snp.bottom) make.height.equalTo(tabCollectionHeightConstant.constant) make.leading.equalToSuperview() make.trailing.equalToSuperview() }) return scrollViewContainerView }() 现在改成这样 还是一样的效果 没有改变视图宽度
最新发布
10-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值