uiscrollview的自动布局,视图层次结构没有为约束做好准备

     2023-03-08     119

关键词:

【中文标题】uiscrollview的自动布局,视图层次结构没有为约束做好准备【英文标题】:uiscrollview's autolayout,The view hierarchy is not prepared for the constraint 【发布时间】:2015-04-10 04:30:35 【问题描述】:

我想使用自动布局将滚动图像视图添加到滚动视图。

视图层次结构如下:

---|

|---占位符视图

|---滚动视图

代码如下:

-(UICollectionViewCell*)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

static NSString* identifier = @"WCollectionViewCell";


WCollectionViewCell* cell =[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
cell.imageScrollview.backgroundColor=[UIColor orangeColor];

UIImageView* imageview1 = [[UIImageView alloc]init];
imageview1.image =[UIImage imageNamed:@"1.jpg"];
imageview1.translatesAutoresizingMaskIntoConstraints=NO;
[cell.imageScrollview addSubview:imageview1];

NSDictionary* views = @@"imageview1":imageview1,@"placeview":cell.placeHolderView,@"scrollview":cell.imageScrollview;

//set the imageview'size
NSArray *img_constraint_H = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[imageview1(placeview)]"
                                                                    options:0
                                                                    metrics:nil
                                                                      views:views];

NSArray *img_constraint_V = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[imageview1(placeview)]"
                                                                    options:0
                                                                    metrics:nil
                                                                      views:views];

[self.view addConstraints:img_constraint_H];
[self.view addConstraints:img_constraint_V];


//set the imageview's position
NSArray*  top_position = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[imageview1]"
                                                            options:0 metrics:nil views:views];

NSArray* bottom_position = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[imageview1]"
                                                              options:0 metrics:nil views:views];

[cell.imageScrollview addConstraints:top_position];
[cell.imageScrollview addConstraints:bottom_position];

return cell;

--------错误--------- 2015-04-10 12:20:46.245 T[92361:1319616] 视图层次结构没有为约束做好准备: 添加到视图时,约束的项必须是该视图(或视图本身)的后代。如果在组装视图层次结构之前需要解决约束,这将崩溃。中断 -[UIView _viewHierarchyUnpreparedForConstraint:] 进行调试。 2015-04-10 12:20:46.246 T[92361:1319616] * 断言失败 -[UIView _layoutEngine_didAddLayoutConstraint:roundingAdjustment:mutuallyExclusiveConstraints:], /SourceCache/UIKit_Sim/UIKit-3318.93/NSLayoutConstraint_UIKitAdditions.m:560 2015-04-10 12:20:46.249 T[92361:1319616] * 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法设置未准备好约束的视图层次结构的布局。”

【问题讨论】:

【参考方案1】:

您的问题是您将图像的高度和宽度的约束添加到 self.view 这不是图像的父视图。

您需要将约束添加到cell.imageScrollview,这是单元格超级视图或图像本身。

所以这两个都应该工作:

//set the imageview'size
NSArray *img_constraint_H = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[imageview1(placeview)]"
                                                                    options:0
                                                                    metrics:nil
                                                                      views:views];

NSArray *img_constraint_V = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[imageview1(placeview)]"
                                                                    options:0
                                                                    metrics:nil
                                                                      views:views];

[cell.imageScrollview addConstraints:img_constraint_H];
[cell.imageScrollview addConstraints:img_constraint_V];

[imageview1 addConstraints:img_constraint_H];
[imageview1 addConstraints:img_constraint_V];

您有两个选项,因为约束不引用父级,只是 imageView。如果视觉格式中有|,则只有第一个选项有效。

另一个提示:

您可以一次添加所有约束:

WCollectionViewCell* cell =[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
cell.imageScrollview.backgroundColor=[UIColor orangeColor];

UIImageView* imageview1 = [[UIImageView alloc]init];
imageview1.image =[UIImage imageNamed:@"1.jpg"];
imageview1.translatesAutoresizingMaskIntoConstraints=NO;
[cell.imageScrollview addSubview:imageview1];

NSDictionary* views = @@"imageview1":imageview1,@"placeview":cell.placeHolderView,@"scrollview":cell.imageScrollview;    
//set the imageview's position
NSArray*  horizontal_constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[imageview1(placeview)]"
                                                            options:0 metrics:nil views:views];

NSArray* vertical_constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[imageview1(placeview)]"
                                                              options:0 metrics:nil views:views];

[cell.imageScrollview addConstraints:horizontal_constraints];
[cell.imageScrollview addConstraints:vertical_constraints];

return cell;

如果您需要更多帮助,请告诉我进展情况!

【讨论】:

是否可以在情节提要中使用 uiscrollview 设计视图并检查自动布局?

】是否可以在情节提要中使用uiscrollview设计视图并检查自动布局?【英文标题】:Isitpossibletodesignviewwithuiscrollviewinstoryboardwithcheckedautolayout?【发布时间】:2013-11-0421:40:37【问题描述】:美好的一天!我有层次结构:视图-滚动视图... 查看详情

具有自动布局约束的 UIScrollView:自动内容大小计算

】具有自动布局约束的UIScrollView:自动内容大小计算【英文标题】:UIScrollViewwithAutoLayoutConstraints:AutoContentSizeCalculation【发布时间】:2015-08-0420:45:27【问题描述】:我在使用自动布局约束时遇到了UIScrollView的问题。我有以下视图... 查看详情

为啥 UIScrollView 不垂直滚动(使用自动布局)?

】为啥UIScrollView不垂直滚动(使用自动布局)?【英文标题】:WhyisaUIScrollViewnotscrollingvertically(usingAutoLayout)?为什么UIScrollView不垂直滚动(使用自动布局)?【发布时间】:2015-10-2017:22:36【问题描述】:我的视图层次结构是UIViewUI... 查看详情

如何使用自动布局动画视图更改视图层次结构?

】如何使用自动布局动画视图更改视图层次结构?【英文标题】:howtoanimateviewschangeviewshierarchyusingautolayout?【发布时间】:2013-04-2418:14:35【问题描述】:我有一个名为self.myMainView的超级视图在那个视图中,我有三个子视图:UIView*... 查看详情

使用自动布局以编程方式创建视图层次结构

】使用自动布局以编程方式创建视图层次结构【英文标题】:CreateviewhierarchyprogrammaticallywithAutoLayout【发布时间】:2014-10-2814:45:00【问题描述】:我想该层次结构具有以下结构:界面视图->UIWebView我想在UIView的底部为UIToolbar留出... 查看详情

用于设置自动布局约束的 iOS 视图层次结构

】用于设置自动布局约束的iOS视图层次结构【英文标题】:iOSViewHierarchyforsettingupAutoLayoutConstraint【发布时间】:2013-01-1911:49:45【问题描述】:视图控制器中与self.navigationController.navigationBar和self.view的子视图最近的祖先是什么,以... 查看详情

使用 XIB 和自动布局操作视图层次结构

】使用XIB和自动布局操作视图层次结构【英文标题】:ManipulateviewhierarchyusingXIBsandauto-layout【发布时间】:2013-05-2822:05:16【问题描述】:我想要完成的事情看起来很简单,但我已经做了一整天了,我想不通。我有一个带有分页滚... 查看详情

为编程视图层次结构设置自动布局约束?

】为编程视图层次结构设置自动布局约束?【英文标题】:Settingupautolayoutconstraintsforprogrammaticviewhierarchy?【发布时间】:2013-06-2707:53:58【问题描述】:我正在像这样以编程方式创建视图层次结构:UIWindow*window=[[UIWindowalloc]initWithFra... 查看详情

使用自动布局使具有动态高度子视图的 UIScrollView 自动工作

】使用自动布局使具有动态高度子视图的UIScrollView自动工作【英文标题】:MakeUIScrollViewwithdynamicheightsubviewsworkautomaticallywithAutoLayout【发布时间】:2017-04-2610:50:40【问题描述】:我有以下视图结构及其约束:UIView"parent"UIScrollView(lea... 查看详情

使用自动布局向 UIScrollView 添加动态大小的视图(高度)

】使用自动布局向UIScrollView添加动态大小的视图(高度)【英文标题】:Addingadynamicallysizedview(height)toaUIScrollViewwithAutoLayout【发布时间】:2014-07-2408:20:32【问题描述】:这是我对此详细视图的视图结构(博客应用程序,我想查看... 查看详情

错误:线程 1:“无法设置未准备好约束的视图层次结构的布局。”使用自动布局时

...“无法设置未准备好约束的视图层次结构的布局。”使用自动布局时【英文标题】:Error:Thread1:"Impossibletosetuplayoutwithviewhierarchyunpreparedforconstraint."whenusingautolayout【发布时间】:2021-11-2318:30:04【问题描述】:我的代码在下... 查看详情

如何使 UIScrollView 与自动布局和动态内容一起使用? [复制]

】如何使UIScrollView与自动布局和动态内容一起使用?[复制]【英文标题】:HowtomakeanUIScrollViewworkwithAutolayoutanddynamiccontent?[duplicate]【发布时间】:2015-12-1611:14:20【问题描述】:我在xib文件中有这个视图层次结构:UIViewUIScrollViewUIView... 查看详情

子视图内的 UIScrollview 高度动态变化

】子视图内的UIScrollview高度动态变化【英文标题】:UIScrollviewinsidesubviewHeightChangeDynamicaly【发布时间】:2016-09-1610:52:45【问题描述】:我在使用自动布局时遇到了UIScrollView的问题。我有以下带有约束的视图层次结构。ViewA(超级... 查看详情

带有 UIScrollView 的纯自动布局

】带有UIScrollView的纯自动布局【英文标题】:PureautolayoutwithaUIScrollView【发布时间】:2014-08-0813:33:53【问题描述】:我正在尝试让UIScrollView使用自动布局定位和调整大小。我正在遵循thisdocumentation中的“纯自动布局方法”指南,但... 查看详情

UIScrollView 在 iOS 7 上停止滚动

】UIScrollView在iOS7上停止滚动【英文标题】:UIScrollViewstoppedscrollingoniOS7【发布时间】:2013-09-1909:22:17【问题描述】:这在以前很有效。这是我的视图层次结构。我设置了contentSize属性,但在iOS7上,滚动视图根本不滚动【问题讨论... 查看详情

多行 UILabel 和 UIScrollview 使用自动布局

】多行UILabel和UIScrollview使用自动布局【英文标题】:MultilineUILabelwithUIScrollviewusingautolayout【发布时间】:2015-03-1409:53:08【问题描述】:我在scrollview中阅读了很多contentview的帖子,但问题略有不同。查看图片我有以下层次结构这里... 查看详情

iOS中具有自动布局的uiscrollview全宽子视图

】iOS中具有自动布局的uiscrollview全宽子视图【英文标题】:FullwidthsubviewsofuiscrollviewwithautolayoutiniOS【发布时间】:2014-10-2810:41:38【问题描述】:我在使UIScrollView的子视图与根视图相同时遇到问题。UIScrollView的约束类似于H:|-0-[scroll... 查看详情

UIScrollView 不使用自动布局约束

】UIScrollView不使用自动布局约束【英文标题】:UIScrollViewdoesn\'tuseautolayoutconstraints【发布时间】:2012-11-2118:11:14【问题描述】:我有一个滚动视图和一个图像视图,我正在用笔尖填充它。我正在使用自动布局。我在两个视图上都... 查看详情