ios - 如何创建与 iOS7 和 iOS8 兼容的动态高度的 UITableViewCells?
<p><p>我正在创建一个我想在 iOS7 和 iOS8 下运行的应用程序,它具有可变的表格单元格高度。在 iOS7 中,我曾经定义一个原型(prototype)单元格,然后在 heightForRowAtIndexPath 中使用它来计算高度,基于放置在标签中的文本的大小。</p>
<p>在使用 Xcode 6 时,这似乎不再起作用。我今天创建了一个小型测试应用程序,看看我是否发疯了(也许我发疯了)。我从根本不定义 heightForRowAtIndexPath 开始。当我用 iOS7 和 iOS8 设备测试它时,它的行为不同。在 iOS8 设备中,它会自动确定单元格高度并且工作正常。在 iOS7 中,所有单元格都返回相同的高度。它不会对带有可变文本的单元格进行自动高度调整,适用于 iOS7,仅适用于 iOS8。</p>
<p>所以......我在想......嗯......在iOS8下我可以使用自动布局来确定高度,并且只为iOS7实现heightForRowAtIndexPath......</p>
<p>好的,所以...我尝试添加 heightForRowAtIndexPath。在 iOS7 下,它在方法 systemLayoutSizeFittingSize 上崩溃。我玩了几个小时,但我似乎没有做任何改变。这是非常简单的代码。</p>
<p>这是 UITableViewController 代码:</p>
<pre><code>//
//TestTableViewController.m
//testTables
//
#import "TestTableViewController.h"
#import "Cell1.h"
@interface TestTableViewController ()
@property (nonatomic, strong) Cell1 *cellPrototype;
@end
@implementation TestTableViewController
- (void)viewDidLoad {
;
forCellReuseIdentifier:@"Cell1"];
}
- (void)didReceiveMemoryWarning {
;
// Dispose of any resources that can be recreated.
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
return 10;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
self.cellPrototype = ;
self.cellPrototype.label1.text = ;
;
CGSize size = ;
return size.height;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
Cell1 *cell = ;
cell.label1.text = ;
return cell;
}
- (NSString*)cellContents:(NSIndexPath *)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
</code></pre>
<p>这是单元格标题(.m 文件中没有任何内容):</p>
<pre><code>//
//Cell1.h
//testTables
//
#import <UIKit/UIKit.h>
@interface Cell1 : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *label1;
@end
</code></pre>
<p>这是单元格的 xib。如您所见,它并不复杂:
<img src="/image/WTHSe.png" alt="enter image description here"/> </p>
<p>那么……这个旧方法不再起作用了吗?如何获得可在两个 iOS 中运行的可变高度单元?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您描述的许多警告都在此处详细解释。 <a href="https://stackoverflow.com/questions/25398312/automatic-preferred-max-layout-width-is-not-available-on-ios-versions-prior-to-8" rel="noreferrer noopener nofollow">Automatic Preferred Max Layout Width is not available on iOS versions prior to 8.0</a> </p>
<p>在 iOS 8 之前,preferredMaxLayoutWidth 需要手动设置。如果不太可能更改此属性,则可以在任何地方设置此属性,但我首选的解决方案是使用自动设置 PreferredMaxLayoutWidth 的子类 UILabel。</p>
<p>您的子类 UILabel 将覆盖 layoutSubviews,以便它的 preferredMaxLayoutWidth 始终与其宽度相同。</p>
<pre><code>- (void)layoutSubviews {
self.preferredMaxLayoutWidth = self.bounds.size.width;
;
}
</code></pre></p>
<p style="font-size: 20px;">关于ios - 如何创建与 iOS7 和 iOS8 兼容的动态高度的 UITableViewCells?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/26744053/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/26744053/
</a>
</p>
页:
[1]