相关疑难解决方法(0)

在iOS 7中替换已弃用的sizeWithFont:

在iOS 7中,sizeWithFont:现已弃用.我现在如何将UIFont对象传递给替换方法sizeWithAttributes:

objective-c deprecated ios7

320
推荐指数
7
解决办法
17万
查看次数

UITableView灵活/动态heightForRowAtIndexPath

案件

通常,您将使用cellForRowAtIndexPath委托方法来设置您的单元格.为单元格设置的信息对于单元格的绘制方式以及大小的大小非常重要.

不幸的是,在heightForRowAtIndexPath委托方法之前调用cellForRowAtIndexPath委托方法,因此我们不能简单地告诉委托返回单元格的高度,因为那时它将为零.

因此,我们需要在表格中绘制单元格之前计算大小.幸运的是,有一种方法可以实现sizeWithFont,它属于NSString类.然而,存在问题,为了动态地计算正确的大小,它需要知道如何呈现单元中的元素.我将在一个例子中说明这一点:

想象一下UITableViewCell,它包含一个名为的标签textLabel.在cellForRowAtIndexPath我们放置的委托方法中textLabel.numberOfLines = 0,它基本上告诉标签它可以具有尽可能多的行以呈现特定宽度的文本.如果我们为textLabel提供一个大于最初赋予textLabel的宽度的文本,则会出现问题.第二行将出现,但单元格的高度不会自动调整,因此我们得到一个混乱的查看表视图.

正如前面所说的,我们可以用sizeWithFont计算出的高度,但它需要知道使用哪种字体,为,什么宽度等.如果,为了简单起见,我们只关心宽度,我们可以硬编码的宽度将约为320.0(不考虑填充).但是如果我们使用UITableViewStyleGrouped而不是普通的宽度那么将会发生大约300.0并且单元格将再次混乱.或者如果我们从纵向交换到横向,我们有更多的空间,但由于我们硬编码300.0,它将不会被使用.

在这种情况下,你必须问自己一个问题,你可以避免多少硬编码.

我自己的想法

您可以调用cellForRowAtIndexPath属于UITableView类的方法来获取特定节和行的单元格.我读了几篇帖子说你不想那样做,但我真的不明白.是的,我同意它已经分配了单元格,但heightForRowAtIndexPath委托方法只调用可见的单元格,因此无论如何都将分配单元格.如果正确使用,dequeueReusableCellWithIdentifier则不会在cellForRowAtIndexPath方法中再次分配单元格,而是使用指针并仅调整属性.那有什么问题呢?

请注意,单元格未在cellForRowAtIndexPath委托方法中绘制,当表格视图单元格变为可见时,脚本将调用setNeedDisplayUITableVieCell上的drawRect方法,该方法将触发绘制单元格的方法.所以cellForRowAtIndexPath直接调用代理不会失去性能,因为它需要被绘制两次.

好的,通过在cellForRowAtIndexPath委托方法中调用heightForRowAtIndexPath委托方法,我们可以获得有关单元格的所有信息,以确定它的大小.

也许你可以创建自己的sizeForCell方法来运行所有选项,如果单元格是Value1样式,或者Value2,等等.

结论/问题

这只是我在思想中描述的理论,我想知道我写的是不是正确的.或者也许还有另一种方法来完成同样的事情.请注意,我希望能够尽可能灵活地做事.

iphone uitableview

60
推荐指数
3
解决办法
3万
查看次数

基于内容的动态UITableView单元格高度

我有一个UITableView填充了自定义单元格(继承自UITableViewCell),每个单元格包含一个UIWebView根据它的内容自动调整大小.这就是问题,如何UITableView根据内容(变量webView)更改单元格的高度.

解决方案必须是动态的,因为用于填充的HTML UIWebViews是从不断变化的Feed中解析的.

我有一种感觉,我需要使用UITableView委托方法,heightForRowAtIndexPath但从它的定义:

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ;//This needs to be variable
}
Run Code Online (Sandbox Code Playgroud)

我无法访问单元格或其内容.我可以更改单元格的高度cellForRowAtIndexPath吗?

任何帮助都会很棒.谢谢.

注意

两年多前我问过这个问题.通过自动布局的介绍,可以找到iOS7的最佳解决方案:

http://t.co/PdUywcTjhu

在iOS8上,此功能内置于SDK中

iphone objective-c uitableview ios

24
推荐指数
4
解决办法
6万
查看次数

如何获取tableView中的单元格对象:(UITableView*)tableView heightForRowAtIndexPath函数?

我在返回heightForRowAtIndexPath时知道单元格的内容.在此函数中如何获取单元格对象?

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

}
Run Code Online (Sandbox Code Playgroud)

如果我试试这个

 [tableView cellForRowAtIndexPath:indexPath]
Run Code Online (Sandbox Code Playgroud)

它失败并在无限循环中消失.

任何的想法?

iphone objective-c ipad ios

18
推荐指数
2
解决办法
3万
查看次数

标签 统计

iphone ×3

objective-c ×3

ios ×2

uitableview ×2

deprecated ×1

ios7 ×1

ipad ×1