【问题标题】:how to dynamically increase the height of scroll view?如何动态增加滚动视图的高度?
【发布时间】:2017-12-03 23:30:23
【问题描述】:

我在滚动视图中放置了一个表格视图和一个视图,如何根据表格视图中的单元格数量以及内容视图中存在的内容动态更改滚动视图的高度

【问题讨论】:

  • 最好不要这样。带有页眉和页脚视图的表格视图无法满足您的需求?
  • 实际上在我看来我也需要放置一个表格视图,所以不能像你说的那样放置@YunCHEN
  • 使用约束来处理上述情况,滚动视图底部应该附加到表格视图的底部。

标签: ios swift3 uiscrollview


【解决方案1】:

您需要设置 ScrollView 的 contensize。 您可以通过适当的自动布局或以编程方式完成它

CGRect contentRect = CGRectZero;
for (UIView *view in self.scrollView.subviews) {
contentRect = CGRectUnion(contentRect, view.frame);
}
self.scrollView.contentSize = contentRect.size;

Swift 3

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
var contentRect = CGRect.zero
     for view: UIView in scrollView.subviews {
        contentRect = contentRect.union(view.frame)  
     }
contentRect.size.height = contentRect.size.height + 20
scrollView.contentSize = contentRect.size
}

Swift 4

这是 Swift 4 中更简洁的版本。Swift 4 归功于 ans

 extension UIScrollView {
    func updateContentView() {
         contentSize.height = subviews.sorted(by: { $0.frame.maxY < $1.frame.maxY }).last?.frame.maxY ?? contentSize.height
     }
 }

您可以在情节提要中完成相同的操作。 有黑客可以做到这一点。

  1. 根据要求将滚动视图顶部、左侧、右侧和高度的约束添加为 1000 或更多。您的 Scroll View 可能会超出您的视图控制器高度本身。

  2. 然后您可以在 Scroll View Bottom 和 Last Subview(在您的情况下 View 包含 TableView 和 PaymentView )之间添加 Constrain 为 0 或 10。

3.您现在可以删除您的高度限制。

但在此之前确保滚动视图的所有子视图之间的约束是正确的。

希望对您有所帮助。快乐编码!

【讨论】:

【解决方案2】:

你只需要做两件事就可以实现这一目标

  1. 在其中添加view和tableview时满足scrollview的所有约束,通过向scrollview的所有边添加约束,以便scrollview可以计算出它的内容大小,但要确保给tableview固定高度(我们稍后会增加加载远程数据时的高度)

  2. 现在,当您从远程 url 获取数据时,在调用 tableview reloadData 后,您必须在代码中实现此方法

func viewDidLayoutSubviews() {
    
    super.viewDidLayoutSubviews()
    
    for constraint in tableView.constraints{
        
        if constraint.firstAttribute == .height{
            
            constraint.constant = tableView.contentSize.height
            break
            
        }
        
    }

    self.view.layoutIfNeeded()

    
}

然后你的tableview高度会根据它的内容高度增加,你的scrollview内容大小也会增加,然后只有你的外部scrollview会滚动而不是tableview滚动

【讨论】:

  • 现在检查已编辑答案中的 swift 代码,如果您遇到任何问题,请告诉我
  • 尝试在您从中获取远程数据的方法中调用此方法,当表格完成重新加载其内容时,您可以在 tableview 重新加载后使用 dispatch_after 或 performSelectorAfterDelay 执行此方法
猜你喜欢
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 2021-12-21
相关资源
最近更新 更多