1

我想用 webview 替换它,这样我就可以显示 html。

PO(cell.subviews);
PO(cell);
PO(cell.contentView.subviews);

webview 需要与 UITableViewCell 的 frame 相同。

这就是我们得到的:

2013-01-31 12:37:35.204 BadgerNew[3888:c07] cell.subviews: (
    "<UITableViewCellContentView: 0xa057140; frame = (0 0; 320 44); layer = <CALayer: 0xa057180>>"
)
2013-01-31 12:37:35.204 BadgerNew[3888:c07] cell: <UITableViewCell: 0xa0c37a0; frame = (0 0; 320 44); text = 'atm'; layer = <CALayer: 0xa0c8530>>
2013-01-31 12:37:35.205 BadgerNew[3888:c07] cell.contentView.subviews: (
    "<UILabel: 0xa0d12a0; frame = (0 0; 0 0); text = 'atm'; clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0xa0571b0>>"
)

此外,为了进一步确认

po [cell textLabel]
(UILabel *) $1 = 0x0a0d12a0 <UILabel: 0xa0d12a0; frame = (0 0; 0 0); text = 'atm'; clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0xa0571b0>>

那么普通 UITableViewCell 的最终标准框架是什么?

我也做过

-(void)layoutSubviews
{
    PO(self);
    PO(self.textLabel);
    while (false);
}

并得到

2013-02-01 09:36:02.048 BadgerNew[1436:c07] self.textLabel: <UILabel: 0x8923390; frame = (0 0; 0 0); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x89e8fc0>>

在做

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

    while (false);
}

产生相同的结果

然后我做了:

-(void)layoutSubviews
{
    [super layoutSubviews];
    PO(self);
    PO(self.textLabel);
    while (false);
}

再次,另一个 0 帧。

4

1 回答 1

2

单元格内的子视图的框架在 之后设置-tableView:cellForRowAtIndexPath

创建一个 UITableViewCell 的子类,它确实是处理此类事情的最佳方式。您可以-textLabel在您的子类中覆盖并根据您的意愿弯曲它,或者您可以覆盖-layoutSubviews并使用-textLabel'frame 然后。

最后一个警告是,弄乱对象的内部结构会导致脆弱的代码在任何 iOS 版本中都可能中断。

于 2013-01-31T06:29:38.707 回答