【问题标题】:How to align UITableView frames one after one and fit into UIScrollView?如何将 UITableView 帧一个接一个对齐并适合 UIScrollView?
【发布时间】:2017-08-08 03:08:15
【问题描述】:

我在 UIScrollView 中有多个 UITableView。表的大小取决于它的行数。这些表格是按顺序排列的。

Table 1
Table 2
Table 3

现在假设表 1 在 'x' 的位置结束,我希望表 2 移动到位置 'x' 和表 3 相同移动到表 2 结束的地方。最后, UIScrollView 适合所有表格。 我是 iOS 新手,所以不知道该怎么做。提前致谢

【问题讨论】:

  • 您是否有理由要使用多个堆叠表视图?我认为如果您使用一个表格视图并将其分开,这样您的每个旧表格视图都会在单个表格视图中的一个部分中更容易。
  • @AdamPro13 一张表格用于发票,一张表格用于借方,一张表格用于贷方。我可以把它们放在一张桌子上,然后像你说的那样把它们分开吗?
  • 是的,您可以将它们放入包含 3 个部分的单个表视图中!我很确定这就是你真正想要的。您可能希望实现UITableViewDataSource 方法- tableView:titleForHeaderInSection:,或者如果您希望每个部分有一个更自定义的标题,请实现UITableViewDelegate 方法-tableView:viewForHeaderInSection:-tableView:heightForHeaderInSection:
  • @AdamPro13 怎么做?对不起,我是新人
  • 网上有很多关于UITableView的教程。您需要解决其中的一些问题。

标签: ios objective-c iphone uitableview uiscrollview


【解决方案1】:

为此,您必须创建 UITableView 的自定义类并禁用它的滚动视图。

@implementation SizedTableView

- (void)setContentSize:(CGSize)contentSize {
    [super setContentSize:contentSize];
    [self invalidateIntrinsicContentSize];
}

- (CGSize)intrinsicContentSize {
   [self layoutIfNeeded]; 
   return CGSizeMake(UIViewNoIntrinsicMetric, self.contentSize.height);
}

@end

创建一个自定义类,子类为UITableView,并添加以上两个方法。

将所有 tableview 添加到 scrollview 并添加适当的约束来工作。

为避免情节提要约束错误,您必须添加 tableview 占位符高度约束,该约束将在构建时删除。您可以从属性检查器添加它。

【讨论】:

  • 好吧,让我试试这个
  • 如果我不想使用约束,那我该怎么办?因为我正在进行的项目是由其他人开发的,他在设计中从未使用过约束
  • @MohammadJulfikar 为此,您必须计算所有 tableview 内容大小,并据此设置滚动视图内容大小。相应地更新 tableview 框架。
  • 我可以简单地通过获取桌子高度来做到这一点吗?如果是这样,我已经尝试过了,但桌子的位置没有改变
  • @MohammadJulfikar 当你得到你的桌子高度?
【解决方案2】:


设置int tableHeight = numberOfRows * RowHeight;

并将表格框架设置为

table1.frame = [CGRectMake(0, 0,scrollView.frame.size.width , tableHeight)];
table2.frame = [CGRectMake(0, CGRectGetMaxY(table1.frame),scrollView.frame.size.width , tableHeight)];
table3.frame = [CGRectMake(0, CGRectGetMaxY(table2.frame),scrollView.frame.size.width , tableHeight)];

希望对你有帮助!!

【讨论】:

  • 这个答案不考虑旋转或调整大小。如果您是 iOS 新手,我强烈建议您避免使用这种方式。
  • 当然...谢谢!!
  • @AdamPro13 那么我们该如何实现呢?我认为我们可以添加约束来满足自动调整大小的需求。
  • 如果表格视图的内容是静态的并且您将每个表格视图的autoresizingMask 设置为UIViewAutoresizingFlexibleWidth,您的方法将有效,这应该会导致表格视图在其父视图更改其大小时拉伸。如果每个表格视图中的内容是动态的,则需要在表格视图重新加载其数据后通知您,以便您每次重新计算高度。
【解决方案3】:

使用一个NSMutableArray 并通过为每个UITable 设置单独的键来分隔每个UITable 的数据。在一个视图控制器中使用多个表不是一个好主意

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多