为啥 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 中更改位置也不起作用,但添加UIButtonTouch 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() 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

用户引导页

以编程方式更改 UIScrollView 的框架(Swift 5)

ScrollView高级特性

Cgr 一个同时管理npmyarn的源切换工具

在 scrollview 或 texview 中输入纯文本

UI控件(UIScrollView)