繁体   English   中英

Swift-直到旋转后才显示UIScrollview中的子UIView

[英]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。 当我旋转屏幕时,一切看起来都应该完全一样:

Gifycat图片链接,因为我还不能发布图片

打印出框架的宽度:

  • 查看宽度:320.0
  • scrollView宽度:240.0
  • contentView宽度:240.0

我已经使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM