【发布时间】:2018-06-21 08:35:29
【问题描述】:
在阅读了苹果网站上的技术说明并阅读了 matt neuburg 关于使用 Autolayout 保持 UIScrollview 进行 iOS 11 编程的书后,我无法完全理解它是如何工作的概念。
基本上我想要的是一个 Scrollview,它会有一个子视图 ChildView,而这个子视图然后有一个 Textview。
下面我附上了我试图以程序化无笔尖,无情节提要实现的目标的模型。
至于代码,这是我通常想出的:
代码
let Scroller: UIScrollView = {
let scroll = UIScrollView()
scroll.translatesAutoresizingMaskIntoConstraints = false
scroll.backgroundColor = UIColor.alizarinColor()
return scroll
}()
// Content view
let ContentView : UIView = {
let content = UIView()
content.translatesAutoresizingMaskIntoConstraints = false
content.backgroundColor = UIColor.blue
return content
}()
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(Scroller)
// Auto layout
Scroller.leftAnchor.constraint(equalTo: view.leftAnchor, constant:0).isActive = true
Scroller.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 0).isActive = true
Scroller.rightAnchor.constraint(equalTo: view.rightAnchor, constant: 0).isActive = true
Scroller.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: 0).isActive = true
Scroller.addSubview(ContentView)
// Undefined Content view
}
请注意: 对于 ContentView,我通常会定义约束来锚定滚动视图内的边缘,但在这种情况下不会使用 Autolayout 以及我想要它的事实当键盘becomesFirstResponder 时垂直向上滚动。我想出的另一种尝试工作的方法是创建一个跨越比滚动视图更大的UIView,以允许子视图成为这个以滚动视图作为其父视图的更大视图的子视图。
我的问题:从这里开始我该如何实现呢?有什么建议? 我一直在考虑这样的事情:(ContentView 将是允许滚动的较大视图,子视图将是层次结构中的第三个子视图)
【问题讨论】:
-
您的滚动视图的子视图永远不会大于滚动视图。 (更像是小于或等于)。比如说你有这个
UIView(height = 500),这个高度非常适合 (iphone 6 ,但不适用于 (iphone 5 >=) .与其单独使用视图,不如添加一个scrollview(如果需要,高度 = 500 或屏幕大小+额外填充到其内容高度)并将所需视图包装为其子视图,那么您的问题是固定。
标签: ios swift uiscrollview autolayout