我有一个 UIScrollView 来显示 UIImageViews。 ImageViews 在运行时根据用户先前保存的图像数量以编程方式插入。我收到以下错误:
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
"<NSLayoutConstraint:0x17029cd90 H:[UIView:0x15cd31e70]-(0)-| (Names: '|':UIScrollView:0x15cd326b0 )>", "<NSLayoutConstraint:0x17029d060 UIScrollView:0x15cd326b0.trailingMargin == UIView:0x15cd31e70.trailing>"
我做了基本的自动布局, ScrollView 在 0 点处固定在所有四个边上。然后我添加一个 contentView 作为 UIScrollView 的 subview (普通 UIView),它也固定在 0 点的所有四个边上。
编辑 Storyboard 约束图像
我在代码中给 contentView 一个宽度,如下所示:
CGSize pagesScrollViewSize = self.scrollView.frame.size;
NSDictionary *views = @{ @"contentView" : self.contentView};
NSDictionary *metrics = @{ @"width" : @(pagesScrollViewSize.width * self.mutableArray.count) };
NSArray *constraints;
constraints = [NSLayoutConstraint constraintsWithVisualFormat"H:|-[contentView(width)]-|" options:0 metrics:metrics views:views];
[self.scrollView addConstraints:constraints];
[self loadVisiblePages];
UIImageViews 的添加方式是这样的,UIImageViews 的添加是根据发生到 ViewController 的 segue 时设置的页数来添加的。
-(void)loadVisiblePages{
CGRect frame = self.scrollView.bounds;
frame.origin.x = frame.size.width * self.page;
frame.origin.y = 0.0f;
ImageForArchiving *newImageObject = (ImageForArchiving*)self.mutableArray;
UIImage *imageForNewPageView = newImageObject.image;
UIImageView *newPageView = [[UIImageView alloc] initWithFrame:frame];
[newPageView setTranslatesAutoresizingMaskIntoConstraints:YES];
newPageView.contentMode = UIViewContentModeScaleAspectFit;
newPageView.image = imageForNewPageView;
[self.scrollView addSubview:newPageView];
[self.pageViews replaceObjectAtIndex:page withObject:newPageView];
}
}
此外,当我滚动 UIScrollView 时,显示的图像会在旋转时不规则地改变大小。我认为这只是上述警告的结果以及我尚未布置 UIImageViews 的事实。在这种情况下,上述警告是什么意思,我该如何解决?
您似乎已将 scrollView 的 trailingMargin 固定到 contentView.trailing。 将此约束的 scrollView.Trailing Margin 更改为 scrollView.Trailing 选择约束后,您可以在 Storyboard 的事件检查器中执行此操作。
或者,清除 contentView 上的所有约束。然后在再次添加固定约束时取消选中 Constrain to margins
并将所有常量设置为 0。
与
在你的代码中改变这一行
NSArray *constraints;
constraints = [NSLayoutConstraint constraintsWithVisualFormat"H:|-[contentView(width)]-|" options:0 metrics:metrics views:views];
[self.scrollView addConstraints:constraints];
用这个:
NSArray *constraints;
constraints = [NSLayoutConstraint constraintsWithVisualFormat"H:|[contentView(width)]|" options:0 metrics:metrics views:views];
[self.scrollView addConstraints:constraints];
在视觉格式中使用 @"H:|-[contentView(width)]-|"
意味着将您的 contentView 固定到 superView 的边距,并在 superView 和 subView 之间添加 8 pts 的空间。在您的 Storyboard约束中,您已经使用 UIScrollView 的 Trailing 和 Leading edge 设置了约束,而在以编程方式添加的约束中,您使用了 Trailing Margin 和 Leading Margin(有点要求 contentView 保持 8 pt. padding)。因此,冲突。
检查视觉格式语法here .
关于ios - 自动布局错误无法同时满足 UIScrollView 的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32730218/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |