当前位置:首页 > 行业动态 > 正文

xcode9 masonry报错

在使用Xcode 9进行开发时,如果你遇到了Masonry布局框架的报错问题,那么可能是因为多种原因导致的,Masonry是一个轻量级的布局框架,它采用链式语法的语法糖,使得Auto Layout的布局更加简洁和易于理解,即便它极大地简化了Auto Layout的编码工作,在使用过程中仍然会遇到一些错误,以下是一些常见的错误及其解决方案:

你需要确保你的项目中正确地集成了Masonry,通常情况下,我们会使用CocoaPods来集成Masonry,如果在这一步就出现问题,可能会导致后续的编译错误。

错误1:No visible @interface for 'UIView' declares the selector 'mas_makeConstraints:']

这个错误通常发生在以下几种情况:

1、Masonry没有正确导入到你的类文件中,确保每一个需要使用Masonry的类文件顶部都导入了Masonry的头文件:

“`

#import "Masonry.h"

“`

而不是使用#import <Masonry/Masonry.h>,因为后者可能导致某些情况下编译器找不到对应的宏定义。

2、你可能忘记在项目的Prefix.pch文件中导入Masonry,如果你是希望通过pch文件全局导入Masonry的话。

3、你可能在编译前没有运行CocoaPods来安装依赖,确保在集成Masonry后运行了pod install或者pod update

错误2:Invalid constraint: constrained view ... not allowed to be added to another view or layout

这个错误通常说明你尝试给一个已经被添加到其他视图或布局的视图添加约束,解决方案如下:

1、确保在添加约束之前,视图已经添加到它的父视图中,通常我们会在添加约束之前添加子视图:

“`objc

[self addSubview:self.myView];

[self.myView mas_makeConstraints:^(MASConstraintMaker *make) {

make.edges.equalTo(self);

}];

“`

2、如果视图已经被添加到父视图中,检查是否有重复添加约束的情况,每一个视图只能有一组有效的约束。

错误3:NSAutoresizingMaskLayoutConstraint error

这个错误通常是由于Auto Layout和AutoresizingMask的冲突导致的,当使用Masonry时,你可能需要关闭AutoresizingMask:

UIView *view = [[UIView alloc] init];
view.translatesAutoresizingMaskIntoConstraints = NO; // 确保关闭AutoresizingMask 

或者,在Masonry 1.0.0版本之后,你可以使用下面的宏来关闭AutoresizingMask:

#define MAS_AUTO_LAYOUT
#import "Masonry.h" 

在你的类文件顶部加入上述宏定义,Masonry会自动帮你处理这个问题。

错误4:Ambiguous layout requirements

这个错误说明你的布局存在二义性,可能是因为提供的约束不足以唯一确定视图的位置和大小,确保以下事项:

1、为视图提供足够的约束,通常至少需要四个约束来确定一个视图的位置和大小。

2、检查是否有冲突的约束,比如两个约束让同一个边缘紧贴不同的视图。

3、检查是否有约束是可选的(使用了mas_equalTo而不是mas_equalToWithPriority),这样可能导致布局的不确定性。

错误5:Intrinsic size of the layout is zero

这个错误可能是因为你给一个没有固有尺寸的视图(如UILabel,其尺寸依赖于其文本内容)添加了错误的约束,导致其无法计算出大小,确保:

1、为依赖于内容的视图提供足够的空间来显示其内容。

2、如果是UILabel,确保其numberOfLines不是0,或者没有设置一个过小的尺寸约束。

3、检查是否有约束阻止了视图计算其固有尺寸。

在解决Masonry的报错时,通用的建议是仔细检查约束,确保它们是合理的,并且视图的层次结构和添加顺序是正确的,如果错误仍然存在,尝试以下步骤:

清理构建目录(Product > Clean Build Folder)。

重启Xcode和模拟器/设备。

确保你的Xcode和CocoaPods都是最新版本。

检查Masonry的版本是否和Xcode版本兼容。

始终记得,阅读错误信息和崩溃日志是定位问题的关键,仔细分析这些信息,通常可以指出问题所在,从而更有效地解决Masonry相关的错误。

0