带有分页的水平Scrollview中的全宽标签

时间:2014-11-12 03:49:42

标签: ios swift uiscrollview

在IB中我有一个Scrollview(用于水平滚动和分页),使用垂直和水平居中的自动布局,占据设备的整个宽度,高度为65.在我的viewDidLoad中,我调用下面的方法使用三个标签填充滚动视图,并且理想地希望每个标签占据设备的整个宽度,使得每个滚动页面具有占据滚动视图的整个宽度的标签。我很好奇如何摆脱用于标签x位置的幻数,以便我可以考虑所有设备宽度。我认为将label2的x位置设置为scrollview.frame.size.width会导致第二个标签从屏幕的右边缘开始,但事实并非如此,我不明白为什么。过去一周我一直坚持这一点,非常感谢任何帮助。我正在使用Xcode 6.1

    func generateScrollView() {

    var label1 = UILabel()
    label1.frame = CGRectMake(0, 0, scrollView.frame.size.width, scrollView.frame.size.height)
    label1.text = "Label 1"
    label1.textColor = UIColor.whiteColor()
    label1.font = UIFont(name: "HelveticaNeue-Thin", size: 40.0)
    label1.backgroundColor = UIColor.greenColor()

    var label2 = UILabel()
    label2.frame = CGRectMake(320, 0, scrollView.frame.size.width, scrollView.frame.size.height)
    label2.text = "Label 2"
    label2.textColor = UIColor.whiteColor()
    label2.font = UIFont(name: "HelveticaNeue-Thin", size: 40.0)
    label2.backgroundColor = UIColor.redColor()

    var label3 = UILabel()
    label3.frame = CGRectMake(640, 0, scrollView.frame.size.width, scrollView.frame.size.height)
    label3.text = "Label 3"
    label3.textColor = UIColor.whiteColor()
    label3.font = UIFont(name: "HelveticaNeue-Thin", size: 40.0)
    label3.backgroundColor = UIColor.yellowColor()


    scrollView.contentSize = CGSize(width: 960.0, height: scrollView.frame.size.height)
    scrollView.pagingEnabled = true;

    scrollView.addSubview(label1)
    scrollView.addSubview(label2)
    scrollView.addSubview(label3)


}

1 个答案:

答案 0 :(得分:1)

generateScrollView()放入viewDidAppear(animated: Bool)方法,而不是viewDidLoad()为我做了诀窍。

要使标签填充设备的宽度,请使用scrollView框架的宽度,如下所示:

label1.frame = CGRectMake(0, 0, scrollView.frame.size.width, scrollView.frame.size.height)

现在,您可以将以下标签的x值设置为滚动视图宽度的倍数,以便标签从设备的右边缘开始。

label2.frame = CGRectMake(scrollView.frame.size.width * 2, 0, scrollView.frame.size.width, scrollView.frame.size.height)

如果您尝试将标签置于滚动视图的每个页面中心,请使用:label.textAlignment = NSTextAlignment.Center。这种定心方法不适用于viewDidLoad()