将 UIScrollView 适配到 UIView
Posted
技术标签:
【中文标题】将 UIScrollView 适配到 UIView【英文标题】:Fitting a UIScrollView to a UIView 【发布时间】:2016-01-12 23:48:47 【问题描述】:我正在尝试使用 UIScrollView 来显示一系列 UIView。在我的故事板中,我有一个视图控制器,其中包含一个使用 AutoLayout 进行约束的 UIView。
视图控制器(灰色的 UIView)
为了调用 UIScrollView,我使用了以下方法:
func initScrollview()
self.mainScrollView = UIScrollView(frame: self.mainView.bounds)
self.mainScrollView!.contentSize = CGSizeMake((self.mainView.bounds.width)*CGFloat(3), self.mainView.frame.height)
self.mainScrollView!.backgroundColor = UIColor.greenColor() // For visualization of the UIScrollView
self.mainScrollView!.pagingEnabled = true
self.mainScrollView!.maximumZoomScale = 1.0
self.mainScrollView!.minimumZoomScale = 1.0
self.mainScrollView!.bounces = false
self.mainScrollView!.showsHorizontalScrollIndicator = true;
self.mainScrollView!.showsVerticalScrollIndicator = false;
self.mainScrollView!.delegate = self
for i in 0...3
var tempView = SubView(frame: self.mainView.bounds)
pages.insert(tempView, atIndex: i)
self.mainScrollView!.addSubview(pages[i]);
self.mainScrollView!.scrollRectToVisible(CGRectMake(mainScrollView!.frame.size.width, 0, mainScrollView!.frame.size.width, mainScrollView!.frame.size.height), animated: false)
当我运行我的代码时,UIScrollView 不适合 UIView。相反,它太短太宽。结果如下所示:
灰色的UIView,绿色的UIScrollView
我做错了什么导致 UIScrollView 的大小不正确?
【问题讨论】:
你把initScrollview
放在哪里了?
我在 super.ViewDidLoad() 之后的 viewDidLoad() 中有 initScrollView。我刚刚注意到,如果我在 viewDidLoad() 中打印 mainView 的宽度,我得到 536.0,如果我在 viewDidAppear() 中打印宽度,我得到 311.0。这是预期的吗?这可能是我问题的根源吗?
是的。看看我的回答:)
【参考方案1】:
您应该将根据屏幕尺寸(UIViewController
的UIView
)初始化 UI 元素尺寸的代码放在viewDidLayoutSubviews
中。因为在viewDidLoad
,屏幕还没有调整大小,
【讨论】:
【参考方案2】:在上面的代码中,没有提到将 mainScrollView 添加到 mainVew。
您要将 mainScrollView 添加到谁的视图?我的意见是你正试图将它添加到 self.view 而它应该是 self.mainView
在调用 initScrollView() 函数后尝试添加以下代码
self.mainView.addSubview(mainScrollView!)
【讨论】:
我添加了您的代码,它部分解决了我的问题。 mainScrollView 位置正确,但大小仍然不正确。我注意到的一件事是我在 viewDidLoad() 中调用了 initScrollView()。如果我在该函数中打印 mainView 的宽度,我得到 536.0,但如果我在 viewDidAppear() 中打印它,我得到 311.0。这可能是我的问题的根源吗?是否预计 mainView 在调用 viewDidAppear() 之前不会调整大小?【参考方案3】:如果您将所有这些视图直接放在情节提要中而不是以编程方式放置,这可能会更容易。我在您的代码中看不到任何无法在 IB 中直观地完成的内容。此外,如果您在情节提要中启用了自动布局,则在代码中设置框架和大小将不起作用。 (自动布局将在下一次通过时更改您的值)
【讨论】:
以上是关于将 UIScrollView 适配到 UIView的主要内容,如果未能解决你的问题,请参考以下文章
将图像从 UIScrollView 移动到 UIView - Swift 4 PanGesture
将捏合手势从自定义 UIView 传递到父 UIScrollView
将 UIView 从 xib 添加到 UIScrollView