reason: 'couldn't find a common superview for <UIView: 0x7ffc2e303270; frame = (0 0; 0 0); layer = <

本文介绍了在使用XIB和Masonry进行布局时遇到的视图约束冲突问题,并提供了解决方案,建议统一采用XIB或代码来管理界面布局。

reason: 'couldn't find a common superview for <UIView: 0x7ffc2e303270; frame = (0 0; 0 0); layer = <CALayer: 0x7ffc2e3033e0>> and <JTCalendarContentView: 0x7ffc2d81f200; baseClass = UIScrollView; frame = (0 64; 375 72); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7ffc2be760c0>; layer = <CALayer: 0x7ffc2bec31f0>; contentOffset: {750, 0}; contentSize: {1875, 72}>'


拉约束的时候,各个控件(有关系的)用的不是一个参照物。我出现这种情况的原因是因为一部分控件用的XIB拉的约束,一部分用的masonry,一个视图用代码写的附在XIB的控件上出现了问题,解决办法,都用XIB,或者代码,或者你找到一个参照物

private lazy var scrollView: DeviceListMasterMultiResponseScrollView = { let scrollView = DeviceListMasterMultiResponseScrollView() scrollView.translatesAutoresizingMaskIntoConstraints = false scrollView.bounces = false scrollView.isScrollEnabled = true scrollView.showsVerticalScrollIndicator = false scrollView.delegate = self scrollView.backgroundColor = .clear scrollView.contentInset = UIEdgeInsets.zero // 先添加到父视图 if scrollView.superview == nil { view.addSubview(scrollView) } // 使用safeAreaLayoutGuide设置约束 NSLayoutConstraint.activate([ scrollView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor), scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor), scrollView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor) ]) // 设置contentSize(如果需要) let contentHeight = scrollView.frame.height + nameLabelViewHeight + 62 scrollView.contentSize = CGSize(width: scrollView.frame.width, height: contentHeight) // 添加容器视图 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 scrollViewContainerView = UIView(frame: CGRect(x: 0, y: 0, width: screenWidth, height: screenHeight - top - bottom)) let scrollViewContainerView = UIView() scrollViewContainerView.backgroundColor = .clear scrollViewContainerView.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ scrollViewContainerView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), scrollViewContainerView.leadingAnchor.constraint(equalTo: view.leadingAnchor), scrollViewContainerView.trailingAnchor.constraint(equalTo: view.trailingAnchor), scrollViewContainerView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor) ]) 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 }() 错误:Thread 1: "Unable to activate constraint with anchors <NSLayoutYAxisAnchor:0x3018ba700 \"UIView:0x103fb1fe0.top\"> and <NSLayoutYAxisAnchor:0x3018cd580 \"UILayoutGuide:0x3034e7e20'UIViewSafeAreaLayoutGuide'.top\"> because they have no common ancestor. Does the constraint or its anchors reference items in different view hierarchies? That's illegal."
10-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值