iOS UIScrollView 的宽度与约束中设置的宽度不同

Posted

技术标签:

【中文标题】iOS UIScrollView 的宽度与约束中设置的宽度不同【英文标题】:iOS UIScrollView's width is different from the width set in constraint 【发布时间】:2016-09-08 10:17:33 【问题描述】:

我是 ios 自动布局的新手。我想使用启用分页的UIScrollView 实现视图寻呼机。我将scrollView设置为(w, h)到(200, 65),但是scrollView的宽度在运行时总是240。结果,内容的偏移量,我添加到滚动视图中的标签,与滚动视图的宽度不匹配。为什么它们不同?如何获得正确的宽度?

private let contents = ["This is the 1st message",
                        "This is the 2nd message",
                        "This is the 3rd message"]

@IBOutlet weak var scrollView: UIScrollView!

override func viewDidLoad() 
    super.viewDidLoad()

    print("scrollView.bounds = \(scrollView.bounds)")
    print("scrollView.frame = \(scrollView.frame)")

    var x: CGFloat = 0
    for content in contents 
        let label = UILabel(frame: CGRectMake(x, 0, 0, 0))
        label.text = content
        label.sizeToFit()
        print("label.frame = \(label.frame)")
        scrollView.addSubview(label)
        x += scrollView.bounds.width
    

    scrollView.contentSize = CGSizeMake(x, scrollView.bounds.height)


Output:
scrollView.bounds = (0.0, 0.0, 240.0, 128.0)
scrollView.frame = (80.0, 156.0, 240.0, 128.0)
label.frame = (0.0, 0.0, 178.0, 20.3333333333333)
label.frame = (240.0, 0.0, 185.666666666667, 20.3333333333333)
label.frame = (480.0, 0.0, 182.333333333333, 20.3333333333333)

【问题讨论】:

添加滚动视图约束 x 和 y 位置。 您目前的尺码等级是多少? @MarcoSantarossa 我目前的尺码等级是 wCompact hRegular @BhadreshKathiriya 我为 x 和 y 位置添加了以下内容,(Scroll View.leading =leading + 80)和(Scroll View.top = top + 90),但它仍然不起作用 @WayneHuang 是想要的尺码等级吗?你在使用不同的尺寸等级吗? 【参考方案1】:

您的问题是您正在使用尺寸等级wCompact hRegular 来处理此约束,因此如果您有另一个尺寸等级(例如不同的方向),则您没有可用的这些约束。

要为iPhone 设置约束,我建议以编程方式进行:

if (IDevice.currentDevice().userInterfaceIdiom == .Phone) 
    // Set constraints or a different UIVIew here 

如果您的应用程序仅适用于 iPhone,您可以使用类大小 Any-Any 避免以编程方式设置。

【讨论】:

谢谢!你是对的。在我将尺寸等级设置为 wAny hAny 后,它就像一个魅力!

以上是关于iOS UIScrollView 的宽度与约束中设置的宽度不同的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift 中设置 UIScrollView 内的全宽图像

当我们使用不同尺寸和类型的屏幕时,如何在 iOS 中设置 UI 控件的宽度和高度约束?

如何在 iOS 中设置视图的最大宽度?

向其内容添加宽度和高度约束后,UIScrollView 滚动停止工作

怎样使用AutoLayOut为UIScrollView添加约束

UIStackView 没有在 UIScrollView 内调整其宽度