我正在编写一个通用iOS应用程序(iPhone和iPad),它主要基于TableView。每个单元格都有多个文本区域,我需要根据内容调整高度。我在Storyboard中定义了所有表格和单元格,我真的希望保持这种方式(更容易用尺寸图形化地看看它会是什么样的。)
问题在于我需要大量信息来计算单元格的最终大小(单元格和子视图的故事板高度,标签宽度,字体大小......)。我以前在代码中只有常量,我会手写值但是:
我使用那个解决方案:
在Cell中我有一些静态变量,它们被设置一次以记住大小(它是从故事板中获取然后很好):
static float cellDefaultHeight;
static float contactsLabelDefaultHeight;
static float contactsLabelDefaultWidth;
static float contactsLabelFontSize;
-(void) awakeFromNib
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// instantiate static variables with the constants
cellDefaultHeight = self.contentView.bounds.size.height;
contactsLabelDefaultHeight = self.contacts.bounds.size.height;
contactsLabelDefaultWidth = self.contacts.bounds.size.width;
contactsLabelFontSize = self.contacts.font.pointSize;
});
}
+ (CGFloat) heightForCellWithData:(NSDictionary *)data
{
// use constants and data to compute the height
return height
}
在计算任何单元格大小之前的表格中,我必须实例化一个以设置静态变量:
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
// get one instance before any size computation
// or the constant won't be there
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
static NSString *CellIdentifier = @"identifier";
[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
});
return [MyCell heightForCellWithData:theData];
}
感觉如此hackish我觉得我完全错过了什么,但我想不出别的东西。有没有好办法呢?
谢谢!
答案 0 :(得分:0)
首先,我认为您应该使用自定义单元格来执行此类操作。现在每次如果你需要改变宽度/高度,你只需要那个单元格的边界。关于标签和文本字段宽度/高度你可以做(self.textview.bounds),然后你可以根据需要设置偏移量。这不是黑客,而是根据逻辑的纯编码,因为每次如果你改变设备它将相应地采取边界,所以不需要记住任何东西。 希望这有效:)