让 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
中添加subview
s,这很好,但您还需要在viewDidLayoutSubviews
的viewDidLayoutSubviews
方法中调整它们的frame
s,因为您的scrollView
在autolayout
传递后会有不同的帧。
如果您可以使用autolayout
:不要依赖scrollView
来调整subview
s 的大小,将subview
s 的大小与self.view
的大小相关联
【讨论】:
以上是关于让 UIView 填充 UIScrollview的主要内容,如果未能解决你的问题,请参考以下文章