我有自定义UITableViewCell,我已覆盖layoutSubviews
并手动计算了子视图的坐标。它工作..但只有当我使用滚动或点击它时,单元格才会更新。此外,当我更改方向时,单元格保持不更新状态。
我尝试过为子视图使用自动布局。并且它工作正常,并且单元格按预期更新:也可以更改方向。
但是......我想使用layoutSubviews
..因为在我的情况下,IB的几十年的限制是一种令人头痛的问题。
那么我应该如何处理layoutSubviews
以获得我的自定义单元格的预期行为?
我尝试使用不同的更新,其他问题建议使用,但没有人解决我的问题。
这是我的代码:
- (void)layoutSubviews
{
[super layoutSubviews];
NSLog(@"------ cell layout subviews ------");
//self.selectedBackgroundView.frame = CGRectMake(10.0f, 0, 300, 80);
CGRect frame = basketButton.frame;
int parentX1 = 0;
int parentY1 = 0;
int parentX2 = self.contentView.bounds.size.width;
int parentY2 = self.contentView.bounds.size.height;
NSLog(@"parentX2: %d", parentX2);
NSLog(@"contentView: %f", self.contentView.frame.size.width);
int x, y, h, w;
int gap = 10;
w = 80;
h = 30;
x = parentX2 - gap - w;
y = parentY2/2 - h/2;
frame = CGRectMake( x, y, w, h );
basketButton.frame = frame;
//NSLog(@"basckeButtonX2: %f", frame.origin.x);
w = 60;
h = 15;
x = frame.origin.x - gap - w;
y = parentY2/2 - h/2;
frame = CGRectMake( x, y, w, h );
priceLabel.frame = frame;
w = 72;
h = 72;
x = gap;
y = gap;
frame = CGRectMake(x, y, w, h);
imageView.frame = frame;
x = imageView.frame.origin.x + imageView.frame.size.width + gap;
y = gap;
w = priceLabel.frame.origin.x - gap - x;
h = parentY2 - gap*2;
frame = CGRectMake(x, y, w, h);
nameLabel.frame = frame;
}
控制器中的:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *MyIdentifier = @"ProductCell";
ProductCell* cell = [tableView dequeueReusableCellWithIdentifier:@"ProductCell"];
NSArray* productsByTableView = [self getProductsByTableView: tableView];
Product* product = [productsByTableView objectAtIndex:indexPath.row];
cell.nameLabel.text = product.name;
CGRect frame = cell.frame;
frame.size.width = tableView.frame.size.width;
cell.frame = frame;
[cell setNeedsLayout];
[cell setNeedsDisplay];
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
ProductCell* cell = [tableView dequeueReusableCellWithIdentifier:@"ProductCell"];
CGRect frame = cell.frame;
frame.size.width = tableView.frame.size.width;
cell.frame = frame;
[cell setNeedsLayout];
[cell setNeedsDisplay];
//[cell layoutSubviews];
return cell.bounds.size.height;
}