为啥 scrollView.frame = CGRectMake() 不起作用
Posted
技术标签:
【中文标题】为啥 scrollView.frame = CGRectMake() 不起作用【英文标题】:why scrollView.frame = CGRectMake() not work为什么 scrollView.frame = CGRectMake() 不起作用 【发布时间】:2014-11-24 15:34:13 【问题描述】:@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var view1: UIView!
override func viewDidLoad()
scrollView.contentSize = CGSizeMake(screenWidth*3, screenHeight)//this one works
view1.frame = CGRectMake(100,100,400,400)//this one not working
是不是viewdidload方法没有按照我的意愿定位UIView?
view1 是 scrollView 的子视图,
.contentSize
适用于滚动视图
但我无法使用 .frame = CGRectMake()
定位 scrollView 和 view1
请大家帮忙。非常感谢!
【问题讨论】:
contentSize
和内容的frame
(包括它的size
)是两个不同的东西。它们不需要相互同步。
但是如何定位scrollview和view1呢?
我正在考虑 viewDidLoad 方法可能是源问题。
现在它可以与 viewDidAppear() 一起使用,但是当我滚动滚动视图时,它会缩小到它在情节提要中设置的内容。
【参考方案1】:
布局完成之后 viewDidLoad
.
您还应该继承viewDidLayoutSubviews
并在那里添加您的“自定义”布局(即设置view.frame
)。
【讨论】:
override func viewDidLayoutSubviews() super.viewDidLayoutSubviews() view1.frame = CGRectMake(100, 100, 400, 400) // 添加此代码后不起作用 我将view1从对象库拖到storyboard中的scrollview(大纲文档中),这会使我的view1自动成为scrollview的子视图吗? 嗨,Holex,现在它可以与 viewDidAppear() 一起使用,但是当我滚动滚动视图时,它会缩小到它在情节提要中设置的内容。【参考方案2】:你可以直接在storyboard中改变值,在UIScrollView元素的“Show the Size Inspector”中替换X和Y值
更新:
在viewDidLoad
中更改位置也不起作用,但添加UIButton
和Touch Up Inside
可以正常工作。好像你不能在viewDidLoad
中改变原点位置
@IBOutlet weak var btn: UIButton!
@IBAction func btnClicked(sender: AnyObject)
scrollView.frame.origin = CGPointMake(100, 100)
UPD2: 要以编程方式创建布局,请参考以下代码示例:
override func viewDidLoad()
super.viewDidLoad()
let scrollView = UIScrollView(frame: CGRectMake(100, 100, 400, 400))
scrollView.backgroundColor = UIColor.redColor()
let uiView = UIView(frame: CGRectMake(110, 110, 200, 200))
uiView.backgroundColor = UIColor.grayColor()
self.view.addSubview(scrollView)
self.view.addSubview(uiView)
【讨论】:
用如何以编程方式设置布局的代码示例更新了我的答案。以上是关于为啥 scrollView.frame = CGRectMake() 不起作用的主要内容,如果未能解决你的问题,请参考以下文章