Ios 滚动视图内容大小

Ios 滚动视图内容大小,ios,iphone,swift,uiscrollview,Ios,Iphone,Swift,Uiscrollview,我正在尝试在注册/加入页面上为我尝试制作的一个小应用制作一个包含3张图片的滚动视图。我使用的代码如下: import UIKit class ViewController: UIViewController, UIScrollViewDelegate { var signInButton: UIButton! var joinButton: UIButton! var pageControl: UIPageControl! @IBOutlet weak var

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

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()
    }
我在视图控制器上放置了一个scrollview(使用大小类
width:Any
height:Any
),并将scrollview的所有四边固定到视图控制器上。出于某种原因,我添加到scrollview的每个视图的宽度都与iPhone的宽度不完全相同

例如,当我试着在iPhone6上运行它时,第一个视图超过了iPhone的宽度。第二和第三种观点也是如此。我希望第一个视图是iPhone的确切宽度,第二个视图正好在第一个视图的右侧,依此类推。在iPhone的宽度范围内,第一个视图似乎有些重叠

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


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

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

然后将您的内容放在您刚刚创建的UIView中。。。砰!此外,我个人将UIView重命名为ContentView,只是为了方便起见

这里有一个屏幕可以帮助您:

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

添加:

scrollView.setNeedsLayout()
scrollView.layoutIfNeeded()
viewDidLoad()方法的开头

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

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

您应该等待约束条件来计算和调整
viewDidAppear
viewDidLayoutSubviews
中的内容大小,才意识到我在viewDidLoad中更新了大小,这是不正确的!谢谢你的建议,我能让它工作了!CGSizeMake不受欢迎非常感谢,它现在可以工作了!对于这段代码是如何修复的,我仍然有点困惑。因此,在viewDidLoad()期间,视图的宽度为600(因为故事板视图的大小为600x600)。但上面的代码确保viewDidLoad完成后,它将返回并使大小正确(不是基于viewDidLoad期间由于情节提要而为600的视图大小,而是现在它将在viewDidLoad完成后基于iPhone视图的大小调整大小,ViewWillDisplay和ViewDidDisplay将被调用)?是,您可以说,这两种方法强制系统不等待
viewwillappeage()
和朋友,并立即应用您的约束。您的约束使滚动视图具有屏幕的大小。将它们放在
viewDidLoad()
的开头,这样,在使用它们之前,所有帧都将是正确的。哦,这样,在我使用滚动视图的size属性之前应用约束。谢谢你解释这个概念!在这种情况下,您没有使用自动布局,因此不需要这些方法
view.frame
viewDidLoad()
中始终具有正确的屏幕大小,只有在使用自动布局时才有差异。刚刚尝试过这个,它也很有效,谢谢您的建议!