首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >滚动视图ContentSize

滚动视图ContentSize
EN

Stack Overflow用户
提问于 2016-03-19 00:18:34
回答 2查看 4.5K关注 0票数 2

我正在尝试制作一个滚动视图,在注册/加入页面上为我试图制作的一个小应用程序提供3张图片。我正在使用下面的代码:

代码语言:javascript
复制
import UIKit

class ViewController: UIViewController, UIScrollViewDelegate {

    var signInButton: UIButton!
    var joinButton: UIButton!
    var pageControl: UIPageControl!
    @IBOutlet weak var scrollView: UIScrollView!
    var colors:[UIColor] = [UIColor.redColor(), UIColor.blueColor(), UIColor.greenColor(), UIColor.yellowColor()]
    var frame = CGRectMake(0, 0, 0, 0)

    override func viewDidLoad() {
        super.viewDidLoad()

        signInButton = UIButton(frame: CGRectMake(1/3.0 * self.view.bounds.size.width, 5/6.0 * self.view.bounds.size.height, 23, 60))

        joinButton = UIButton(frame: CGRectMake(2/3.0 * self.view.bounds.size.width, 5/6.0 * self.view.bounds.size.height, 23, 60))

        pageControl = UIPageControl(frame: CGRectMake(1/2.0 * self.view.bounds.size.width, 70/100.0 * self.view.bounds.size.height, 23, 60))

        self.view.addSubview(signInButton)
        self.view.addSubview(joinButton)
        self.view.addSubview(pageControl)

        signInButton.addTarget(self, action: "signInButtonClicked:", forControlEvents: .TouchUpInside)
        joinButton.addTarget(self, action: "joinButtonClicked:", forControlEvents: .TouchUpInside)
        pageControl.addTarget(self, action: Selector("changePage:"), forControlEvents: UIControlEvents.ValueChanged)

        configurePageControl()
        scrollView.delegate = self

        for index in 0...3 {
            frame.size = scrollView.frame.size
            frame.origin.x = scrollView.frame.size.width * CGFloat(index)
            scrollView.pagingEnabled = true

            let view: UIView = UIView(frame: frame)
            view.backgroundColor = colors[index]
            scrollView.addSubview(view)
        }

        self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * 4, self.scrollView.frame.size.height)
    }

    func configurePageControl() {
        self.pageControl.numberOfPages = colors.count
        self.pageControl.currentPage = 0
        self.pageControl.tintColor = UIColor.redColor()
        self.pageControl.pageIndicatorTintColor = UIColor.blackColor()
        self.pageControl.currentPageIndicatorTintColor = UIColor.greenColor()
    }

我在视图控制器上放置了一个滚动视图(使用了size类width: Anyheight: Any),并将滚动视图的所有四面都固定在视图控制器上。由于某些原因,我添加到滚动视图中的每个视图的宽度都与iPhone不完全相同。

例如,当我尝试在iPhone 6上运行它时,第一个视图扩展到iPhone的宽度。这发生在第二和第三视图上。我希望第一个视图是iPhone的精确宽度,第二个视图正好位于第一个视图的右边,依此类推。第一个视图似乎与iPhone的宽度重叠。

这是否是因为我使用的是size类( width : any和height: and ),而我应该禁用size类并为每个iPhone宽度添加一个滚动视图?

有人能帮我找出这个问题吗。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-19 01:54:02

添加:

代码语言:javascript
复制
scrollView.setNeedsLayout()
scrollView.layoutIfNeeded()

viewDidLoad()方法的开头。

当使用自动布局时,总是在访问视图的框架之前调用这两种方法,否则可能会得到不正确的大小。

问题是,当调用viewDidLoad()时,您的view仍然具有600的宽度(因为您的故事板视图控制器的600x600大小)。您的约束规定滚动视图应该与设备的宽度相同,但这些约束只在viewDidLoad()完成后应用,然后计算自动布局的下一个计划传递。添加上面的代码将强制自动布局执行一次传递,从而为您的大小计算提供了正确的帧大小以供后续使用。

票数 7
EN

Stack Overflow用户

发布于 2016-03-19 01:53:10

放入滚动视图,设置约束。然后抓取一个UIView,将其放入滚动视图,将其设置为等宽、等高,并将其居中(使用CTRL +拖动到滚动视图,您将得到一个小的弹出菜单)

然后把你的内容放在你刚刚创建的UIView中.砰!另外,我个人将我的UIView重命名为ContentView,只是为了

下面是一个帮助您的屏幕:

现在我自己仍然对高度有问题,我通常只是使用一个固定的高度作为内容视图,因为如果我不这样做,它就不会滚动.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36096343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档