让 UIView 填充 UIScrollview

Posted

技术标签:

【中文标题】让 UIView 填充 UIScrollview【英文标题】:Make UIView fill UIScrollview 【发布时间】:2016-05-18 10:34:59 【问题描述】:

我有一个分页滚动视图,有两个视图,第一个是填充UIScrollview,第二个留在中间。我不知道出了什么问题,但它不会填充 iPhone6 但它适合 iPhone5。以下是我的代码:

查看层次结构

 UIView
        --StackView (Properties -- Axis(Vertical) Alignment(Fill) Distribution(Fill) Spacing(0))
            --UIView (Fixed height. 60)
            --UIView (Main Views Holder)
                --ScrollView(Content Size: Screen Width * 2, Height: Height left between it margin to the MainView and BottomView) and I notice, that the scrollview keeps remaining size 433 on both iPhone5 and 6. And when I check my storyboard, that's the exact same height there
                --UIView(Height: 102, Width: Screen Width)BottomView

 @IBOutlet weak var scrollView: UIScrollView!

var rectanglePhot: UIView!
var squarePhoto: UIView!

override func viewDidLoad() 
    super.viewDidLoad()

    scrollView.contentSize = CGSize(width: self.view.frame.size.width * 2, height: scrollView.frame.size.height)
    scrollView.autoresizingMask = .FlexibleWidth
    scrollView.translatesAutoresizingMaskIntoConstraints = false
    scrollView.backgroundColor = UIColor.greenColor()

    iniiCameraView()


func iniiCameraView() 
    rectanglePhot = UIView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.scrollView.frame.size.height)) <-- This is the problematic one
    //rectanglePhot = UIView()
    let specifyY = self.scrollView.frame.size.height - self.view.frame.size.width
    squarePhoto = UIView(frame: CGRect(x: self.view.frame.size.width, y: specifyY, width: self.view.frame.size.width, height: self.view.frame.size.width))
    scrollView.addSubview(rectanglePhot)
    scrollView.addSubview(squarePhoto)

    rectanglePhot.backgroundColor = UIColor.blueColor()
    squarePhoto.backgroundColor = UIColor.brownColor()

    print("Rect Height ", rectanglePhot.frame.size.height)
    print("Scroll Height ", scrollView.frame.size.height)
    print("Specify Y ", specifyY)

还有图片Image Added to Scrollview a index[0]

【问题讨论】:

可能是您的视图没有得到正确的框架。设置 self.view.frame = [[UIScreen mainScreen]bounds] 如果不是这样,self.view.frame.size.width 应该会浮出,(self.view.frame.size.width*2) for UIScrollview contentSize 也不正确 通过给scrollview一个边框颜色来检查你的scrollview是否填满了整个屏幕 【参考方案1】:

在 viewdidappear 中添加代码。自动布局将在 viewdidload 之后应用

【讨论】:

而且,它奏效了。我知道我应该使用加载层次结构,但使用了错误的层次结构。正在使用viewWillAppear 我的滚动视图没有响应代表。还是因为委托是从情节提要中设置的? 只需打印 scrollview.delegate 并确保它不为零。 好吧,它只是没有响应这个方法scrollViewDidEndDecelerating【参考方案2】:

替换

UIView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.scrollView.frame.size.height))

与:

UIView(frame: CGRect(x: 0, y: 0, width: self.scrollView.bounds.size.width, height: self.scrollView.bounds.size.height))

这样,UIView 将采用滚动视图的确切大小

【讨论】:

这个self.scrollView.frame.size.width 也需要一半的 contentSize【参考方案3】:

如果您不想使用autolayout:在viewDidLoad 中添加subviews,这很好,但您还需要在viewDidLayoutSubviewsviewDidLayoutSubviews 方法中调整它们的frames,因为您的scrollViewautolayout 传递后会有不同的帧。

如果您可以使用autolayout:不要依赖scrollView 来调整subviews 的大小,将subviews 的大小与self.view 的大小相关联

【讨论】:

以上是关于让 UIView 填充 UIScrollview的主要内容,如果未能解决你的问题,请参考以下文章

UIView 填充颜色

如何用另一个视图填充主 ViewController 上的 UIView?

获取uiimageview下的uiview部分?

UIView 未调整大小以填充 iPhone 6 窗口

iOS:UIImage 缩放以填充 UIView

命中测试 UIView 子类的填充区域