ios - 即使在添加子视图后也无法使用锚添加约束
问题描述
我是 iOS 新手。这是我的代码导致错误。
FSImageView *imageView = [_imageViews objectAtIndex:(NSUInteger) page];
if ((NSNull *) imageView == [NSNull null]) {
imageView = [self dequeueImageView];
if (imageView != nil) {
[_imageViews exchangeObjectAtIndex:(NSUInteger) imageView.tag withObjectAtIndex:(NSUInteger) page];
imageView = [_imageViews objectAtIndex:(NSUInteger) page];
}
}
if (imageView == nil || (NSNull *) imageView == [NSNull null]) {
imageView = [[FSImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, _scrollView.bounds.size.width, _scrollView.bounds.size.height)];
UIColor *backgroundColor = barsHidden ? _backgroundColorHidden : _backgroundColorVisible;
[imageView changeBackgroundColor:backgroundColor];
[_imageViews replaceObjectAtIndex:(NSUInteger) page withObject:imageView];
}
imageView.useScaleFactor = self.useScaleFactor;
imageView.image = _imageSource[page];
if (imageView.superview == nil) {
[_scrollView addSubview:imageView];
if (@available(iOS 11.0, *)) {
[imageView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor
constant:0.0].active = YES;
[imageView.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor
constant:0.0].active = YES;
} else {
// Fallback on earlier versions
}
}
异常发生在 Anchor 的东西上。它说..
由于未捕获的异常“NSGenericException”而终止应用程序,原因:“无法使用锚激活约束,因为它们没有共同的祖先。约束或其锚点是否引用不同视图层次结构中的项目?这是非法的。
解决方案
此时查看您的代码
[imageView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor
constant:0.0].active = YES;
[imageView.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor
constant:0.0].active = YES;
您正在尝试激活关于 superView(即您的 self.view)的 superView(即您的 scrollView)的约束这是非法的
你的结构就像 UIView -> ScrollView -> imageView。并且您正在从 UIView 设置锚点,您应该尝试相对于 ScrollView 设置它。
编辑
你应该试试这个:
[imageView.topAnchor constraintEqualToAnchor:_scrollView.topAnchor
constant:0.0].active = YES;
[imageView.bottomAnchor constraintEqualToAnchor:_scrollView.bottomAnchor
constant:0.0].active = YES;
此外,为.leftAnchor 和 .rightAnchor 设置。
编辑
[_scrolLView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor
constant:0.0].active = YES;
[_scrolLView.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor
constant:0.0].active = YES;
此外,为.leftAnchor 和 .rightAnchor 设置。
尝试并分享结果。
希望能帮助到你。
推荐阅读
- node.js - 如何根据 aws cognito 中的特殊条件对用户进行身份验证
- class - Dart - 创建一个类来扩展 List
功能 - odbc - 此数据库不支持 Sql api 错误
- android - 在android应用程序中垂直显示文本(带有ruby注释的Japanies字符)
- c++ - VS-2019 的编译错误
- mysql - Mgt 开发环境 - MySQL 突然无法启动
- c++ - 如何重新制作现有的随机数组以具有唯一元素(有限制)
- string - Elixir - 如何检查字符串是否包含文本或是否为数字(“453”)
- javascript - 打开街道地图,并回调 OpenLayer
- angular - 类型“any[]”上不存在属性“id”