[英]Programmatically scroll a UIScrollView to the top of a child UIView (subview) in Swift
[英]Swift - Child UIView in UIScrollview not showing until after rotation
在使用“自动布局”构建基本的UIScrollView示例时,我遇到了一些奇怪的行为。
在情节提要编辑器中,我添加了UIScrollView作为默认UIView的子级,并在其中添加了新的UIView并将其命名为contentView:
视图
--scrollView
----内容查看
我向contentView添加了一些标签和文本框,并将其约束设置为父容器(contentView)。
我还将对contentView的约束设置为UIScrollView,将UIScrollView约束为其父级,最后将contentView设置为使用与顶层UIView相同的高度和宽度。 添加约束后,有关约束缺失的所有错误或警告都消失了,并且屏幕在Storyboard编辑器中的显示效果与我所希望的完全一样。
为了便于故障排除,我将主视图涂成蓝色,将UIScrollView涂成黄色,将contentView涂成绿色。
当我在模拟器或真实电话上运行该应用程序时,文本字段将缩小,而不是缩小为200宽,标签3及其文本框丢失(很可能在屏幕外),并且屏幕为黄色,指示正在显示UIScrollView。 当我旋转屏幕时,一切看起来都应该完全一样:
我已经使用Xcode 6.4和7.0 beta 4在Swift 1和2中复制了此行为。
所以我设法通过覆盖viewController.swift中的viewDidLayoutSubviews()函数来修复子UIView。
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let widthConstraint = NSLayoutConstraint(item: contentView, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: parentView.frame.width)
contentView.addConstraint(widthConstraint)
let heightConstraint = NSLayoutConstraint(item: contentView, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: parentView.frame.height)
contentView.addConstraint(heightConstraint)
}
parentView是顶级UIView的出口,而contentView是UIScrollView中子UIView的出口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.