ios - 是否可以子类化 UITableView 并使其具有基于单元格数量的固有内容大小?

标签 ios objective-c cocoa-touch uitableview uiview

我希望我的 UITableView 只达到它需要的高度,因为它漂浮在主要 UIViewControllerview 上方。如果我将高度硬编码为 200,而表格中只有一个单元格,这看起来很傻。

我知道在我的 View Controller 中我可以监视 TableView 并根据它拥有的单元格数量定义它的高度,但高度是 View 的一个属性,对于 MVC 它不会 Controller 主动管理 View 的高度很有意义。

是否可以有一个 UITableView 子类,并让它根据它包含的单元格数量定义一个固有高度?因此,使用自动布局,我可以将子类添加到我的 View 中,指定其宽度,将其垂直居中,并可能定义一个“小于或等于”高度约束,以使其小于 200pts。但是在大多数情况下, View 的固有内容大小是否会自动定义 View 的高度?

这就像一个 UILabel 可以水平和垂直居中,左右有一定距离,并自动垂直增长和收缩。

我可以使用 UITableView 子类来实现吗?

最佳答案

您可以通过让 TableView 使用其 contentSize 属性“知道”它需要多高来轻松地做到这一点。如果您使用估计的行高,此值可能会有些不准确,但它应该足够好。在此示例中,我为 TableView 提供了高度约束(以及宽度和中心 Y),并为其创建了一个 IBOutlet (heightCon)。唯一需要的代码是这个,

@interface RDTableView ()
@property (weak,nonatomic) IBOutlet NSLayoutConstraint *heightCon;
@end

@implementation RDTableView

-(void)reloadData {
    [super reloadData];
    self.heightCon.constant = MIN(200, self.contentSize.height);
}

您还必须覆盖 reloadRowsAtIndexPaths:withRowAnimation: 和 reloadSections:withRowAnimation: 如果您也使用其中任何一个更新您的表格。

关于ios - 是否可以子类化 UITableView 并使其具有基于单元格数量的固有内容大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27134755/

相关文章:

iOS:在 Storyboard上使用 BeeFramework 使用网格 TableView

ios - 创建 iOS/OS X 跨平台类

iphone - iPhone sdk 中是否有内置日历 View

ios - Swift if let 在 Optional(nil) 上评估成功

ios - 如何在 iOS 中为自定义键盘制作删除按钮?

ios - locationInView 忽略方向

objective-c - NSTextField 的单元格 setPlaceholderAttributedString - 获得焦点时占位符不可见

objective-c - 在 UITextfield 中输入文本后以编程方式更改焦点

ios - 如果我在 UIViewController 和 UITabBar 之间切换,则无法滚动回顶部

ios - 如何在不添加/删除约束的情况下使用 AutoLayout 根据父高度调整 subview 高度