将 UIScrollView 中的内容视图固定到其底部而不是其顶部边缘
Posted
技术标签:
【中文标题】将 UIScrollView 中的内容视图固定到其底部而不是其顶部边缘【英文标题】:Pin content view in UIScrollView to its bottom rather than its top edge 【发布时间】:2018-05-21 18:21:19 【问题描述】:默认情况下,UIScrollView
将其内容视图固定在其顶部边缘,即当您将一些内容添加到具有垂直滚动轴的滚动视图并且内容的总高度小于整个滚动视图的高度时,内容显示在滚动视图的顶部。
有没有办法改变这种行为并让滚动视图将其内容视图固定在底部?
(换句话说:我希望内容“从底部增长”。)
【问题讨论】:
你使用的是普通的 UIScrollView 还是 UITableView?如果您使用的是普通滚动视图,您目前如何添加和定位子视图? 您是否希望滚动视图中的特定视图固定在底部,而其他内容滚动到其下方? 这是一个通用的 UIScrollView,并不特定于表格视图或任何东西。我将一个视图作为子视图添加到滚动视图中,并使用布局约束将其固定到其超级视图边界。 我希望内容视图和滚动视图中的所有内容都能正常滚动,视图没有固定位置。 【参考方案1】:可以在滚动视图的某个位置添加视图
这是简单的示例代码:
class ViewController: UIViewController
var scrollView: UIScrollView!
var views: UIView!
override func viewDidLoad()
super.viewDidLoad()
views = UIView.init()
scrollView = UIScrollView.init()
scrollView.addSubview(views)
self.view.addSubview(scrollView)
addViewToBottomScroll()
override func viewDidLayoutSubviews()
super.viewDidLayoutSubviews()
views.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 1300)
scrollView.frame = self.view.frame
scrollView.contentSize = views.frame.size
func addViewToScrollView()
let label = UILabel(frame: CGRect(x: 0, y: 10, width: self.view.frame.width, height: 40))
label.text = "ScrollView"
label.textAlignment = .center
views.addSubview(label)
let bottomView = UIView(frame: CGRect(x: 15.0, y: 950.0, width: self.view.frame.width - 30, height: 300))
bottomView.backgroundColor = .yellow
views.addSubview(bottomView)
希望能回答你的问题
【讨论】:
不,这不是我的问题的答案。您设置为 1300 点高度的views
是滚动视图的内容视图。我想将该内容视图固定到底部(当它比滚动视图低时),而不是它的任何子视图。【参考方案2】:
通常的解决方法是翻转滚动视图,然后翻转内容视图。
例如
scrollView.transform = CGAffineTransform(scaleX: 1, y: -1)
contentView.transform = CGAffineTransform(scaleX: 1, y: -1)
我自己真的很想知道一个更清洁的解决方案。
【讨论】:
以上是关于将 UIScrollView 中的内容视图固定到其底部而不是其顶部边缘的主要内容,如果未能解决你的问题,请参考以下文章
固定 UIScrollView 的子视图,而其他子视图可滚动
UIScrollView + 在滚动屏幕之前将项目固定到顶部