• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 如何创建与 iOS7 和 iOS8 兼容的动态高度的 UITableViewCells?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 03:12:20 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在创建一个我想在 iOS7 和 iOS8 下运行的应用程序,它具有可变的表格单元格高度。在 iOS7 中,我曾经定义一个原型(prototype)单元格,然后在 heightForRowAtIndexPath 中使用它来计算高度,基于放置在标签中的文本的大小。

在使用 Xcode 6 时,这似乎不再起作用。我今天创建了一个小型测试应用程序,看看我是否发疯了(也许我发疯了)。我从根本不定义 heightForRowAtIndexPath 开始。当我用 iOS7 和 iOS8 设备测试它时,它的行为不同。在 iOS8 设备中,它会自动确定单元格高度并且工作正常。在 iOS7 中,所有单元格都返回相同的高度。它不会对带有可变文本的单元格进行自动高度调整,适用于 iOS7,仅适用于 iOS8。

所以......我在想......嗯......在iOS8下我可以使用自动布局来确定高度,并且只为iOS7实现heightForRowAtIndexPath......

好的,所以...我尝试添加 heightForRowAtIndexPath。在 iOS7 下,它在方法 systemLayoutSizeFittingSize 上崩溃。我玩了几个小时,但我似乎没有做任何改变。这是非常简单的代码。

这是 UITableViewController 代码:

//
//  TestTableViewController.m
//  testTables
//

#import "TestTableViewController.h"
#import "Cell1.h"

@interface TestTableViewController ()

@property (nonatomic, strong) Cell1 *cellPrototype;

@end

@implementation TestTableViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.tableView registerNib:[UINib nibWithNibName"Cell1" bundle:nil] forCellReuseIdentifier"Cell1"];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableViewUITableView *)tableView {
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableViewUITableView *)tableView numberOfRowsInSectionNSInteger)section {
    // Return the number of rows in the section.
    return 10;
}

- (CGFloat)tableViewUITableView *)tableView heightForRowAtIndexPathNSIndexPath *)indexPath {

    self.cellPrototype = [self.tableView dequeueReusableCellWithIdentifier"Cell1"];
    self.cellPrototype.label1.text = [self cellContents:indexPath];

    [self.cellPrototype layoutIfNeeded];
    CGSize size = [self.cellPrototype systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
    return size.height;

}


- (UITableViewCell *)tableViewUITableView *)tableView cellForRowAtIndexPathNSIndexPath *)indexPath {
    Cell1 *cell = [tableView dequeueReusableCellWithIdentifier"Cell1" forIndexPath:indexPath];

    cell.label1.text = [self cellContents:indexPath];
    return cell;
}

- (NSString*)cellContentsNSIndexPath *)indexPath  {

    if (indexPath.row == 0) {
        return @"one line";
    }
    else if (indexPath.row == 1) {
        return @"two lines I think will result from this piece of text that goes over";
    }
    else if (indexPath.row == 2) {
        return @"three lines I think will result from this piece of text that goes over and then even extends a little more again";
    }
    else {
        return @"three lines I think will result from this piece of text that goes over and then even extends a little more again, and then extends over more and more lines like it will go on forever and never end but in fact it does end right here.";
    }

}

@end

这是单元格标题(.m 文件中没有任何内容):

//
//  Cell1.h
//  testTables
//
#import <UIKit/UIKit.h>

@interface Cell1 : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *label1;

@end

这是单元格的 xib。如您所见,它并不复杂: enter image description here

那么……这个旧方法不再起作用了吗?如何获得可在两个 iOS 中运行的可变高度单元?



Best Answer-推荐答案


您描述的许多警告都在此处详细解释。 Automatic Preferred Max Layout Width is not available on iOS versions prior to 8.0

在 iOS 8 之前,preferredMaxLayoutWidth 需要手动设置。如果不太可能更改此属性,则可以在任何地方设置此属性,但我首选的解决方案是使用自动设置 PreferredMaxLayoutWidth 的子类 UILabel。

您的子类 UILabel 将覆盖 layoutSubviews,以便它的 preferredMaxLayoutWidth 始终与其宽度相同。

- (void)layoutSubviews {
    self.preferredMaxLayoutWidth = self.bounds.size.width;
    [super layoutSubviews];
}

关于ios - 如何创建与 iOS7 和 iOS8 兼容的动态高度的 UITableViewCells?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26744053/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap