UIScrollView 高度不会根据视图大小动态更新?
Posted
技术标签:
【中文标题】UIScrollView 高度不会根据视图大小动态更新?【英文标题】:UIScrollView height not updated dynamically based on views size? 【发布时间】:2018-11-01 06:36:06 【问题描述】:我有 VC,因为我添加了 UIScrollView -> UIView。之后我添加了 3 个 tableViews 并添加了约束。基于内容 tableViews 动态调整大小,例如 tbl1、tbl2 和 tbl3 分别有 10、5 和 7 行。根据内容,我想更新我的整个视图。这里tableViews height更新成功,但不是ScrollView。
我的代码是...
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view.
tbl1.delegate = self
tbl1.dataSource = self
tbl2.delegate = self
tbl2.dataSource = self
tbl3.delegate = self
tbl3.dataSource = self
override func viewDidLayoutSubviews()
DispatchQueue.main.async
//Update tbl1 frame
var frame = self.tbl1.frame
frame.size.height = self.tbl1.contentSize.height
self.tbl1.frame = frame
//Update tbl2 frame
var frame2 = self.tbl2.frame
let y = self.tbl1.frame.maxY
frame2.origin.y = y
frame2.size.height = self.tbl2.contentSize.height
self.tbl2.frame = frame2
//Update tbl3 frame
var frame3 = self.tbl3.frame
let y2 = self.tbl2.frame.maxY
frame3.origin.y = y2
frame3.size.height = self.tbl3.contentSize.height
self.tbl3.frame = frame3
// MARK: - UITableView Delegates
func numberOfSections(in tableView: UITableView) -> Int
return 1
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
if tableView == tbl1
return 10
else if tableView == tbl2
return 5
else
return 7
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
if tableView == tbl1
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "TBL ONE"
return cell
else if tableView == tbl2
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "TBL TWO"
return cell
else
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "TBL THREE"
return cell
【问题讨论】:
你在哪里更新你的滚动视图高度? 显示你添加到scrollView
的约束。
其实我并没有更新scrollview,因为我在scrollView的最后一个tableview底部添加了约束
@PGDev 首先我添加了 ScrollView Cons:0,0,0,0。我在 scrollView Cons:0,0,0,0 上添加了视图,宽度等于主视图,高度等于主视图。之后我添加了 tableViews tbl1 cons: 0,0,0, height 125. Tbl2 Cons: 0,0,0, height 125. tbl3 cons: 0,0,0,0
【参考方案1】:
只需将此行添加到viewDidLayoutSubviews()
的末尾
self.scrollView.contentSize.height = self.tbl1.contentSize.height + self.tbl2.contentSize.height + self.tbl3.contentSize.height
【讨论】:
这是什么subviews.last!在 self.myScrollView.subviews[0].subviews.last! 我发表评论你可以设置你的 tableview3 或检查 subview 是否等于 tableview3 我复制了你的代码,并在 viewDidLayoutSubviews() 中调用了那个(setScrollViewContentSize()) 函数。但是滚动视图没有更新 我正在设置滚动高度:212.0 我认为你的故事板约束不合适以上是关于UIScrollView 高度不会根据视图大小动态更新?的主要内容,如果未能解决你的问题,请参考以下文章