动态UITableViewCell高度不起作用

时间:2016-10-30 12:06:36

标签: objective-c uitableview autolayout

(带故事板的iOS 8) 我的tableView上有一个正确的UITableViewCell细节。

在storyboard中,Title和Right Detail标签设置为numberoflines = 0

我的代码:

function memoize(fn) {
    var memory = new Map();
    return function(arg) {
        if (memory.has(arg)) {
            console.log('using memory');
            return memory.get(arg);
        } else {
            var result = fn(arg);
            memory.set(arg, result);
            return result;
        }
    };
}

var fn = (n) => 2 * n
var m_fn = memoize(fn)

console.log(fn(18));
console.log(m_fn(18));
console.log(m_fn(18)); // outputs also "using memory"

在cleanJson结束时,我运行- (void)viewDidLoad { [super viewDidLoad]; keyArray = [[NSMutableArray alloc]init]; self.table.estimatedRowHeight = 140.0; self.table.rowHeight = UITableViewAutomaticDimension; [spinner startAnimating]; [self cleanJson:prunedDictionary]; } - (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewAutomaticDimension; } - (CGFloat) tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath{ return UITableViewAutomaticDimension; } 。 TableViewCell会调整大小,但它们都调整到相同的大小,看起来像是默认大小。 (我知道他们调整大小的原因是因为在Storyboard中我将高度设置为200,并且当应用程序运行时它们都被调整为更小的尺寸)

为什么他们没有正确调整大小?

3 个答案:

答案 0 :(得分:1)

问题是您使用的是内置单元格类型以及内置标题和详细信息标签。那些细胞类型不是自我大小的。

您必须使用自定义单元格并自行设计,并使用从内到外调整单元格大小的约束。

答案 1 :(得分:0)

您不需要这两种委托方法中的任何一种。单元格没有正确调整大小,因为您的自动布局约束设置是incorect.Check这些约束并确保从上到下至少存在一个约束视图路径。我的意思是你能够逻辑地从单元格的顶部跳跃..从所有的视图和垂直的constraitns之间,然后到底部。

像这样:

超级视图的顶部

保证金约束

视图

保证金约束

视图

保证金约束

超级视图的底部。

中间的视图必须被限制为固定大小..或者他们必须能够根据其内容调整大小。很明显,最终高度是所有边距和视图高度的组合。

它是一个线性函数

finalheight = topmargin + viewHeight + margin + viewHieght..etc....etc..bottommargin 

答案 2 :(得分:0)

实际上有一种方法 - 但我更喜欢创建自定义UITableViewCell

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    let cell = self.tableView(tableView, cellForRowAt: indexPath)
    let targetSize = CGSize(width: self.tableView.bounds.width, height: CGFloat.infinity)

    return cell.systemLayoutSizeFitting(targetSize,
                                        withHorizontalFittingPriority: 1000,
                                        verticalFittingPriority: 900).height
}