swift - UIScrollview 不适用于 Storyboard

标签 swift uiscrollview ios8 xcode6

您好,我正在尝试在 Storyboard 中设置 ScrollView ,并按照以下步骤进行操作:

  1. 将 ScrollView 添加到 Root View 。
  2. 将零空间固定到 super View 的所有边缘。
  3. 在上面的 ScrollView 中添加一个 UIView (contentView)。
  4. 将零空格固定到 ScrollView 的所有边缘添加一些小部件到 contentView 并将 contentView 的高度更改为 2000。

我看到这个解决方案适用于我看过的许多教程,但它不适用于我。我究竟做错了什么?我用的是 swift。

谁能一步步解释如何在 Storyboard中设置 ScrollView ?

我的约束: constrains for scrollview

最佳答案

好吧,让我们想象一下下面的 View 层次结构(请注意,如果您在“身份检查器”的“文档”部分中为这些 View 指定唯一名称,则在 Interface Builder 中查看约束会更容易):

enter image description here

要设置它,您需要在 IB 中添加以下约束(我打算用 VFL 编写它,因为这是显示约束的一种非常简洁的方式):

  1. 显然,相对于其父 View (在本例中为主视图)定义 ScrollView :

    H:|[scrollView]|
    V:|[scrollView]|
    
  2. 定义 contentView 这样

    • 它的宽度与主视图(==view)相同,并且

    • ScrollView 的 contentSize 将更改以适应 contentView 的大小。每TN2154 , ScrollView 及其 subview 之间的约束定义了 ScrollView 的 contentSize,而不是 subview 的相对大小。

    因此:

    H:|[contentView(==view)]|
    V:|[contentView]|
    
  3. 定义三个标签的布局,使它们在 contentView 中偏移:

    H:|-[label1]-|
    H:|-[label2]-|
    H:|-[label3]-|
    
  4. 与其硬编码 contentView 的高度(以及 ScrollView 的 contentSize),不如定义标签与垂直高度的关系contentView,它(由于上面的第 2 步)调整 ScrollView 的 contentSize 的垂直高度:

    V:|-[label1]-[label2]-[label3]-|
    

这就是您需要做的全部。我没有对任何宽度进行硬编码(主视图自动具有宽度, ScrollView 和更重要的 contentView 都定义了与此相关的宽度。但是标签宽度是从contentViewcontentView 高度(以及 ScrollView 的 contentSize)是从三个标签的固有高度推断出来的。

最终结果是 IB 中的约束,如下所示:

enter image description here


仅供引用,如果您想进行一些诊断,可以在应用程序在模拟器上运行时单击查看调试按钮:

enter image description here

您可以查看 View (以及可选的约束)并确保一切正常:

enter image description here

您还可以通过 (lldb) 提示查看 _autolayoutTrace:

(lldb) po [[UIWindow keyWindow] _autolayoutTrace]

UIWindow:0x7fbbb3617910
|   •UIView:0x7fbbb349a840
|   |   *UIScrollView:0x7fbbb3491c80
|   |   |   *UIView:0x7fbbb348e180
|   |   |   |   *UILabel:0x7fbbb348e450'Label'
|   |   |   |   *UILabel:0x7fbbb3490670'Label'
|   |   |   |   *UILabel:0x7fbbb3490a70'Label'
|   |   |   UIImageView:0x7fbbb34a3eb0
|   |   |   UIImageView:0x7fbbb34a3800
|   |   *_UILayoutGuide:0x7fbbb349a970
|   |   *_UILayoutGuide:0x7fbbb349b460

这确认没有冲突的布局,也没有模棱两可的布局。

关于swift - UIScrollview 不适用于 Storyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28531062/

相关文章:

iOS8 图标大小和图标名称以及启动图像

ios - Swift:谷歌地图代码抛出零异常

ios - 动态创建UI元素时如何设置scrollview高度

ios - UITableView 内容大小小于预期

ios - 如何在滚动时使 UIImage 淡入淡出?

ios - 新 iPhone 6 和 6+ 的 iAds

ios - Swift 代码签名错误

ios - "unexpectedly found nil"超出 viewDidLoad

swift - 核心数据从日志中单独显示属性

ios - 适用于 iOS 的 AWS 开发工具包 : problems with conversion from Swift 2 to Swift 3