问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

IOS 用xib自定义cell并且使用autolayout功能,出现控件重叠的情况是怎么回事

发布网友 发布时间:2022-04-30 04:20

我来回答

1个回答

热心网友 时间:2023-10-12 04:48

创建Xib文件
首先将Cell做好布局,调整到满意的位置和宽度,然后开始做Autolayout设定。
Autolayout操作方式有两种,一种是选择目标后,使用右下角的工具栏;另一种是直接使用右键拖拽目标,在弹出的菜单中选择*项。当选择的目标比较小的时候,可以打开左侧的菜单,在这里做拖拽操作一样是可以的。个人感觉后者更方便一些。
开始之前,先来介绍下使用的基本工具吧。

第一个按钮是和对齐有关的,就是控制多个元素(Lable, Button等)的统一约束。例如我们需要让标题和内容按照左,就选择标题和内容元素,选择Leading Edges设置为5即可。

第二个按钮是和元素位置固定有关的*条件,直接看图吧:

右侧能够看到当前选择元素*条件的列表:

这里有两个参数,“Content Hugging Priority”和“Content Compression Resistance Priority”,感觉不太好理解,栈爆上找到一篇解释,讲的挺好的:Cocoa Autolayout: content hugging vs content compression resistance priority
有时候想要一个元素的间距是一个动态值,例如距离右侧至少10pt(即>=10pt),那么可以在上图中点击右侧按钮(齿轮)进入详细设置:

第三个按钮是有关清除*条件、根据*更新视图大小的工具。个人比较常用的是清除*条件,有时候设置错了很麻烦,直接清除掉重新来就行了。

上面这些就是常用到的一些*条件了。个人觉得使用右键拖拽弹出的菜单选择更方便和直观一些,因为菜单中会根据拖拽内容动态显示可用项供我们选择,菜单如图

大致就是这些了吧……
我来谈谈自己的用法。总体上是从上到下,从左到右做约束*。在这个例子中,就是设置标题->内容->发帖人这样的顺序。

设置标题的顶部和左侧距离,以及宽度(防止超出边界)。
设置内容的顶部(距离标题)和左侧距离,以及宽度。设置最大行数。
设置发帖人的顶部和左侧距离,以及高度。
设置发帖时间的顶部和左侧距离,距离右侧间距(防止内容过长)。
关键步骤,设置发帖人距离底部距离,如果不设置这个参数,那么下面代码计算的Cell高度会永远是0。
多试一试,如果有错误或者缺少*,XCode会有提示。它报出的错误一般都是必须修正的,但它给的自动修正建议有时并不是我们想要的(正确的),想清楚再添加。
代码部分
使用了xib制作的Cell,那么在原来的项目代码中如何使用呢?看代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

static NSString *CellIdentifier = @"CellIdentifier";

- (void)viewDidLoad
{
//注册TableView中用于复用的Cell
[self.tableView registerNib:[UINib nibWithNibName:@"BBSPostContentCell" bundle:nil] forCellReuseIdentifier:CellIdentifier];
//...
}

//关键方法,获取复用的Cell后模拟赋值,然后取得Cell高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
BBSPostContentCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

NSDictionary *dataSourceItem = [self.dataSource objectAtIndex:indexPath.row];
cell.titleLabel.text = [dataSourceItem valueForKey:@"title"];
cell.contentLabel.text = [dataSourceItem valueForKey:@"body"];

[cell setNeedsUpdateConstraints];
[cell updateConstraintsIfNeeded];

CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;

return height;
}

//在cellForRowAtIndexPath中,按照常规方法做赋值就行了
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
BBSPostContentCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

NSDictionary *dic = dataSource[indexPath.row];
cell.titleLabel.text = dic[@"title"];
cell.contentLabel.text = dic[@"body"];

return cell;
}

2014.1.2: 在测试时发现这部分的代码还存在一些性能问题(整个表视图在更新时会卡顿),我会稍后补上。
我在使用Instruments分析发现,heightForRowAtIndexPath中调用dequeueReusableCellWithIdentifier会占用很多CPU资源,因此我试着不使用registerNib方法注册复用Cell,而在代码中手动处理,类似这样:

1
2
3
4
5
6
7

BBSPostContentCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[NSBundle mainBundle] loadNibNamed:@"BBSPostContentCell" owner:self options:NULL][0];
NSLog(@"cell loadNibNamed");
} else {
NSLog(@"cell dequeueReusableCellWithIdentifier");
}

这时我发现这里的Cell调用dequeueReusableCellWithIdentifier方法总是返回nil,因此每次都是从xib中加载,从而耗费了大量的资源。问题的原因我还不清楚,目前我的解决方法是,单独生成一个Cell用于在heightForRowAtIndexPath方法中计算高度。
其次,在[tableView reloadData]和[tableView insertRowsAtIndexPaths]时,底层会将所有行高重新计算,这个会占用大量的时间,因此我试着对行高做了缓存,暂时解决了这个问题。
关于兼容性问题
由于Autolayout只能在iOS6.0以上版本使用,而根据友盟统计,目前6.0以下的用户大概还有8%左右(2013.12)。现在有两个办法解决:
哥不在乎,放弃这些用户!(好霸气=。=)把项目的部署版本修改为6.0以上即可。
咳…咳…这个嘛,用户还是有必要支持的………恩,那我们来说说这个怎么兼容。
思路很简单,我们告诉XCode,6.0以上版本使用Autolayout,以下的旧版本不要使用这个就可以了。
将原xib文件inspector中选择”Interface Builder Document”->”Build for”->”iOS 6.0 and Later”,告诉XCode,这个xib在6.0以上设备编译。
将xib文件拷贝一份副本,命名为”xxx_iOS5.xib”,在inspector中选择”Project Deployment Target”,也就是说使用项目部署目标版本(即最低版本5.0),并取消”Use Autolayout”选项。
创建Xib文件
首先将Cell做好布局,调整到满意的位置和宽度,然后开始做Autolayout设定。
Autolayout操作方式有两种,一种是选择目标后,使用右下角的工具栏;另一种是直接使用右键拖拽目标,在弹出的菜单中选择*项。当选择的目标比较小的时候,可以打开左侧的菜单,在这里做拖拽操作一样是可以的。个人感觉后者更方便一些。
开始之前,先来介绍下使用的基本工具吧。

第一个按钮是和对齐有关的,就是控制多个元素(Lable, Button等)的统一约束。例如我们需要让标题和内容按照左,就选择标题和内容元素,选择Leading Edges设置为5即可。

第二个按钮是和元素位置固定有关的*条件,直接看图吧:

右侧能够看到当前选择元素*条件的列表:

这里有两个参数,“Content Hugging Priority”和“Content Compression Resistance Priority”,感觉不太好理解,栈爆上找到一篇解释,讲的挺好的:Cocoa Autolayout: content hugging vs content compression resistance priority
有时候想要一个元素的间距是一个动态值,例如距离右侧至少10pt(即>=10pt),那么可以在上图中点击右侧按钮(齿轮)进入详细设置:

第三个按钮是有关清除*条件、根据*更新视图大小的工具。个人比较常用的是清除*条件,有时候设置错了很麻烦,直接清除掉重新来就行了。

上面这些就是常用到的一些*条件了。个人觉得使用右键拖拽弹出的菜单选择更方便和直观一些,因为菜单中会根据拖拽内容动态显示可用项供我们选择,菜单如图

大致就是这些了吧……
我来谈谈自己的用法。总体上是从上到下,从左到右做约束*。在这个例子中,就是设置标题->内容->发帖人这样的顺序。

设置标题的顶部和左侧距离,以及宽度(防止超出边界)。
设置内容的顶部(距离标题)和左侧距离,以及宽度。设置最大行数。
设置发帖人的顶部和左侧距离,以及高度。
设置发帖时间的顶部和左侧距离,距离右侧间距(防止内容过长)。
关键步骤,设置发帖人距离底部距离,如果不设置这个参数,那么下面代码计算的Cell高度会永远是0。
多试一试,如果有错误或者缺少*,XCode会有提示。它报出的错误一般都是必须修正的,但它给的自动修正建议有时并不是我们想要的(正确的),想清楚再添加。
代码部分
使用了xib制作的Cell,那么在原来的项目代码中如何使用呢?看代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

static NSString *CellIdentifier = @"CellIdentifier";

- (void)viewDidLoad
{
//注册TableView中用于复用的Cell
[self.tableView registerNib:[UINib nibWithNibName:@"BBSPostContentCell" bundle:nil] forCellReuseIdentifier:CellIdentifier];
//...
}

//关键方法,获取复用的Cell后模拟赋值,然后取得Cell高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
BBSPostContentCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

NSDictionary *dataSourceItem = [self.dataSource objectAtIndex:indexPath.row];
cell.titleLabel.text = [dataSourceItem valueForKey:@"title"];
cell.contentLabel.text = [dataSourceItem valueForKey:@"body"];

[cell setNeedsUpdateConstraints];
[cell updateConstraintsIfNeeded];

CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;

return height;
}

//在cellForRowAtIndexPath中,按照常规方法做赋值就行了
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
BBSPostContentCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

NSDictionary *dic = dataSource[indexPath.row];
cell.titleLabel.text = dic[@"title"];
cell.contentLabel.text = dic[@"body"];

return cell;
}

2014.1.2: 在测试时发现这部分的代码还存在一些性能问题(整个表视图在更新时会卡顿),我会稍后补上。
我在使用Instruments分析发现,heightForRowAtIndexPath中调用dequeueReusableCellWithIdentifier会占用很多CPU资源,因此我试着不使用registerNib方法注册复用Cell,而在代码中手动处理,类似这样:

1
2
3
4
5
6
7

BBSPostContentCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[NSBundle mainBundle] loadNibNamed:@"BBSPostContentCell" owner:self options:NULL][0];
NSLog(@"cell loadNibNamed");
} else {
NSLog(@"cell dequeueReusableCellWithIdentifier");
}

这时我发现这里的Cell调用dequeueReusableCellWithIdentifier方法总是返回nil,因此每次都是从xib中加载,从而耗费了大量的资源。问题的原因我还不清楚,目前我的解决方法是,单独生成一个Cell用于在heightForRowAtIndexPath方法中计算高度。
其次,在[tableView reloadData]和[tableView insertRowsAtIndexPaths]时,底层会将所有行高重新计算,这个会占用大量的时间,因此我试着对行高做了缓存,暂时解决了这个问题。
关于兼容性问题
由于Autolayout只能在iOS6.0以上版本使用,而根据友盟统计,目前6.0以下的用户大概还有8%左右(2013.12)。现在有两个办法解决:
哥不在乎,放弃这些用户!(好霸气=。=)把项目的部署版本修改为6.0以上即可。
咳…咳…这个嘛,用户还是有必要支持的………恩,那我们来说说这个怎么兼容。
思路很简单,我们告诉XCode,6.0以上版本使用Autolayout,以下的旧版本不要使用这个就可以了。
将原xib文件inspector中选择”Interface Builder Document”->”Build for”->”iOS 6.0 and Later”,告诉XCode,这个xib在6.0以上设备编译。
将xib文件拷贝一份副本,命名为”xxx_iOS5.xib”,在inspector中选择”Project Deployment Target”,也就是说使用项目部署目标版本(即最低版本5.0),并取消”Use Autolayout”选项。

热心网友 时间:2023-10-12 04:48

创建Xib文件
首先将Cell做好布局,调整到满意的位置和宽度,然后开始做Autolayout设定。
Autolayout操作方式有两种,一种是选择目标后,使用右下角的工具栏;另一种是直接使用右键拖拽目标,在弹出的菜单中选择*项。当选择的目标比较小的时候,可以打开左侧的菜单,在这里做拖拽操作一样是可以的。个人感觉后者更方便一些。
开始之前,先来介绍下使用的基本工具吧。

第一个按钮是和对齐有关的,就是控制多个元素(Lable, Button等)的统一约束。例如我们需要让标题和内容按照左,就选择标题和内容元素,选择Leading Edges设置为5即可。

第二个按钮是和元素位置固定有关的*条件,直接看图吧:

右侧能够看到当前选择元素*条件的列表:

这里有两个参数,“Content Hugging Priority”和“Content Compression Resistance Priority”,感觉不太好理解,栈爆上找到一篇解释,讲的挺好的:Cocoa Autolayout: content hugging vs content compression resistance priority
有时候想要一个元素的间距是一个动态值,例如距离右侧至少10pt(即>=10pt),那么可以在上图中点击右侧按钮(齿轮)进入详细设置:

第三个按钮是有关清除*条件、根据*更新视图大小的工具。个人比较常用的是清除*条件,有时候设置错了很麻烦,直接清除掉重新来就行了。

上面这些就是常用到的一些*条件了。个人觉得使用右键拖拽弹出的菜单选择更方便和直观一些,因为菜单中会根据拖拽内容动态显示可用项供我们选择,菜单如图

大致就是这些了吧……
我来谈谈自己的用法。总体上是从上到下,从左到右做约束*。在这个例子中,就是设置标题->内容->发帖人这样的顺序。

设置标题的顶部和左侧距离,以及宽度(防止超出边界)。
设置内容的顶部(距离标题)和左侧距离,以及宽度。设置最大行数。
设置发帖人的顶部和左侧距离,以及高度。
设置发帖时间的顶部和左侧距离,距离右侧间距(防止内容过长)。
关键步骤,设置发帖人距离底部距离,如果不设置这个参数,那么下面代码计算的Cell高度会永远是0。
多试一试,如果有错误或者缺少*,XCode会有提示。它报出的错误一般都是必须修正的,但它给的自动修正建议有时并不是我们想要的(正确的),想清楚再添加。
代码部分
使用了xib制作的Cell,那么在原来的项目代码中如何使用呢?看代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

static NSString *CellIdentifier = @"CellIdentifier";

- (void)viewDidLoad
{
//注册TableView中用于复用的Cell
[self.tableView registerNib:[UINib nibWithNibName:@"BBSPostContentCell" bundle:nil] forCellReuseIdentifier:CellIdentifier];
//...
}

//关键方法,获取复用的Cell后模拟赋值,然后取得Cell高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
BBSPostContentCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

NSDictionary *dataSourceItem = [self.dataSource objectAtIndex:indexPath.row];
cell.titleLabel.text = [dataSourceItem valueForKey:@"title"];
cell.contentLabel.text = [dataSourceItem valueForKey:@"body"];

[cell setNeedsUpdateConstraints];
[cell updateConstraintsIfNeeded];

CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;

return height;
}

//在cellForRowAtIndexPath中,按照常规方法做赋值就行了
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
BBSPostContentCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

NSDictionary *dic = dataSource[indexPath.row];
cell.titleLabel.text = dic[@"title"];
cell.contentLabel.text = dic[@"body"];

return cell;
}

2014.1.2: 在测试时发现这部分的代码还存在一些性能问题(整个表视图在更新时会卡顿),我会稍后补上。
我在使用Instruments分析发现,heightForRowAtIndexPath中调用dequeueReusableCellWithIdentifier会占用很多CPU资源,因此我试着不使用registerNib方法注册复用Cell,而在代码中手动处理,类似这样:

1
2
3
4
5
6
7

BBSPostContentCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[NSBundle mainBundle] loadNibNamed:@"BBSPostContentCell" owner:self options:NULL][0];
NSLog(@"cell loadNibNamed");
} else {
NSLog(@"cell dequeueReusableCellWithIdentifier");
}

这时我发现这里的Cell调用dequeueReusableCellWithIdentifier方法总是返回nil,因此每次都是从xib中加载,从而耗费了大量的资源。问题的原因我还不清楚,目前我的解决方法是,单独生成一个Cell用于在heightForRowAtIndexPath方法中计算高度。
其次,在[tableView reloadData]和[tableView insertRowsAtIndexPaths]时,底层会将所有行高重新计算,这个会占用大量的时间,因此我试着对行高做了缓存,暂时解决了这个问题。
关于兼容性问题
由于Autolayout只能在iOS6.0以上版本使用,而根据友盟统计,目前6.0以下的用户大概还有8%左右(2013.12)。现在有两个办法解决:
哥不在乎,放弃这些用户!(好霸气=。=)把项目的部署版本修改为6.0以上即可。
咳…咳…这个嘛,用户还是有必要支持的………恩,那我们来说说这个怎么兼容。
思路很简单,我们告诉XCode,6.0以上版本使用Autolayout,以下的旧版本不要使用这个就可以了。
将原xib文件inspector中选择”Interface Builder Document”->”Build for”->”iOS 6.0 and Later”,告诉XCode,这个xib在6.0以上设备编译。
将xib文件拷贝一份副本,命名为”xxx_iOS5.xib”,在inspector中选择”Project Deployment Target”,也就是说使用项目部署目标版本(即最低版本5.0),并取消”Use Autolayout”选项。
创建Xib文件
首先将Cell做好布局,调整到满意的位置和宽度,然后开始做Autolayout设定。
Autolayout操作方式有两种,一种是选择目标后,使用右下角的工具栏;另一种是直接使用右键拖拽目标,在弹出的菜单中选择*项。当选择的目标比较小的时候,可以打开左侧的菜单,在这里做拖拽操作一样是可以的。个人感觉后者更方便一些。
开始之前,先来介绍下使用的基本工具吧。

第一个按钮是和对齐有关的,就是控制多个元素(Lable, Button等)的统一约束。例如我们需要让标题和内容按照左,就选择标题和内容元素,选择Leading Edges设置为5即可。

第二个按钮是和元素位置固定有关的*条件,直接看图吧:

右侧能够看到当前选择元素*条件的列表:

这里有两个参数,“Content Hugging Priority”和“Content Compression Resistance Priority”,感觉不太好理解,栈爆上找到一篇解释,讲的挺好的:Cocoa Autolayout: content hugging vs content compression resistance priority
有时候想要一个元素的间距是一个动态值,例如距离右侧至少10pt(即>=10pt),那么可以在上图中点击右侧按钮(齿轮)进入详细设置:

第三个按钮是有关清除*条件、根据*更新视图大小的工具。个人比较常用的是清除*条件,有时候设置错了很麻烦,直接清除掉重新来就行了。

上面这些就是常用到的一些*条件了。个人觉得使用右键拖拽弹出的菜单选择更方便和直观一些,因为菜单中会根据拖拽内容动态显示可用项供我们选择,菜单如图

大致就是这些了吧……
我来谈谈自己的用法。总体上是从上到下,从左到右做约束*。在这个例子中,就是设置标题->内容->发帖人这样的顺序。

设置标题的顶部和左侧距离,以及宽度(防止超出边界)。
设置内容的顶部(距离标题)和左侧距离,以及宽度。设置最大行数。
设置发帖人的顶部和左侧距离,以及高度。
设置发帖时间的顶部和左侧距离,距离右侧间距(防止内容过长)。
关键步骤,设置发帖人距离底部距离,如果不设置这个参数,那么下面代码计算的Cell高度会永远是0。
多试一试,如果有错误或者缺少*,XCode会有提示。它报出的错误一般都是必须修正的,但它给的自动修正建议有时并不是我们想要的(正确的),想清楚再添加。
代码部分
使用了xib制作的Cell,那么在原来的项目代码中如何使用呢?看代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

static NSString *CellIdentifier = @"CellIdentifier";

- (void)viewDidLoad
{
//注册TableView中用于复用的Cell
[self.tableView registerNib:[UINib nibWithNibName:@"BBSPostContentCell" bundle:nil] forCellReuseIdentifier:CellIdentifier];
//...
}

//关键方法,获取复用的Cell后模拟赋值,然后取得Cell高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
BBSPostContentCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

NSDictionary *dataSourceItem = [self.dataSource objectAtIndex:indexPath.row];
cell.titleLabel.text = [dataSourceItem valueForKey:@"title"];
cell.contentLabel.text = [dataSourceItem valueForKey:@"body"];

[cell setNeedsUpdateConstraints];
[cell updateConstraintsIfNeeded];

CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;

return height;
}

//在cellForRowAtIndexPath中,按照常规方法做赋值就行了
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
BBSPostContentCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

NSDictionary *dic = dataSource[indexPath.row];
cell.titleLabel.text = dic[@"title"];
cell.contentLabel.text = dic[@"body"];

return cell;
}

2014.1.2: 在测试时发现这部分的代码还存在一些性能问题(整个表视图在更新时会卡顿),我会稍后补上。
我在使用Instruments分析发现,heightForRowAtIndexPath中调用dequeueReusableCellWithIdentifier会占用很多CPU资源,因此我试着不使用registerNib方法注册复用Cell,而在代码中手动处理,类似这样:

1
2
3
4
5
6
7

BBSPostContentCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[NSBundle mainBundle] loadNibNamed:@"BBSPostContentCell" owner:self options:NULL][0];
NSLog(@"cell loadNibNamed");
} else {
NSLog(@"cell dequeueReusableCellWithIdentifier");
}

这时我发现这里的Cell调用dequeueReusableCellWithIdentifier方法总是返回nil,因此每次都是从xib中加载,从而耗费了大量的资源。问题的原因我还不清楚,目前我的解决方法是,单独生成一个Cell用于在heightForRowAtIndexPath方法中计算高度。
其次,在[tableView reloadData]和[tableView insertRowsAtIndexPaths]时,底层会将所有行高重新计算,这个会占用大量的时间,因此我试着对行高做了缓存,暂时解决了这个问题。
关于兼容性问题
由于Autolayout只能在iOS6.0以上版本使用,而根据友盟统计,目前6.0以下的用户大概还有8%左右(2013.12)。现在有两个办法解决:
哥不在乎,放弃这些用户!(好霸气=。=)把项目的部署版本修改为6.0以上即可。
咳…咳…这个嘛,用户还是有必要支持的………恩,那我们来说说这个怎么兼容。
思路很简单,我们告诉XCode,6.0以上版本使用Autolayout,以下的旧版本不要使用这个就可以了。
将原xib文件inspector中选择”Interface Builder Document”->”Build for”->”iOS 6.0 and Later”,告诉XCode,这个xib在6.0以上设备编译。
将xib文件拷贝一份副本,命名为”xxx_iOS5.xib”,在inspector中选择”Project Deployment Target”,也就是说使用项目部署目标版本(即最低版本5.0),并取消”Use Autolayout”选项。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
兰州加沙肉的做法 酸辣加沙怎么做 ...&Vidda电视机推荐!含55/65/75/85/100寸数据对比! ...海信电视推荐 Vidda电视机推荐!含55/65/75/85/100寸数据对比! 微积分,这是这道题的解题步骤,请老师看一下为什么要这样做,为什么会引 ... 微积分中的主部是什么意思 沃柑刚打了除草剂可以修剪吗? 如何选择合适的MySQL版本进行下载mysql下载那个版本 迷室往逝第四章怎么过_第四章图文视频通关攻略 《迷室往逝》第六章花园图文通关攻略介绍_《迷室往逝》第六章花园图文... 通宇思科数字电影学院 学final cut pro周末短期班怎么样 seize, grasp, hold 和catch区别是什么啊? seize scramble snatch 的区别 iOS 如何让表的格不能选中 只能滑动 snatch和swoop都有“攫取”的意思,如何区分应用? snatch汉语是什么意思 iOS或Android开发中有哪些库或工具可以帮助实现数据可视化 海贼王阿菊为什么不让说snatch? iOS UISearchBar的使用以及怎么设置searchBar下面的范围选择框_百度知 ... 请问catch、 grab、 grasp、 seize、 snatch的区别 请问高手catch、 grab、 grasp、 seize、 snatch的区别和用法?_百度... 怎么使用Accessibility获取IOS APP控件元素 ios:下拉框控件是不是要自己封装 ios 控件名 能否在oracle数据库里编写触发器,触发后向别的数据库写数据 1500以内能买到什么好用的手机啊? 中国皇帝大全 求机战OG的桌面 义乌发往泰州t7786次火车经过哪些站台 橙粉。粟粉。粘米粉。是什么东东。。 catch与snatch的区别 北京通宇思科数字电影学院怎么样? [悬赏]高中英语选择题,速求解答(题比较难,需要英语水平较高) 北京通宇思科数字电影科技有限公司怎么样? grap和snatch用法区别? IOS中下拉菜单怎么实现 通宇思科数字电影学院的影视剪辑课程学什么软件? snatch opptunority是抓住机会的意思吗 学录音专业的考前学习去哪里? 学习影视后期特效的学费是多少? 亲爱滴兄弟姐妹们英语好的请进来下为在下释疑多谢啦不胜感激~~_百度... 我想报名北京通宇思科数字电影学院的smoke课程,可以先试听吗?老师讲的怎么样? 通宇思科数字电影学院在海淀中关村这边有校区吗? power snatch是什么意思 大家好,我想学调色,电影方面的。我现在只会ps,不知道可不可学。 takeaway中文是什么意思? 北京哪家影视后期公司比较大,学的软件高端些呢? grip grab seize grasp的区别 ios nil 和null 的区别 grasp,grip,grab有什么区别?