【问题标题】:Changing ScrollViews subview dynamically in iOS 8在 iOS 8 中动态更改 ScrollViews 子视图
【发布时间】:2023-03-19 20:36:01
【问题描述】:

我在主页中使用 ScrollView 以垂直滚动视图中的内容,如下所示(Ipad 分辨率):

为此,我在顶部设置了一个View,在下面设置了另一个View。

但我想要在这里做的是将下面的View 更改为另一个更大的View,如果某些条件为真(例如在viewDidLoad() 中),并且 ScrollView 垂直滚动关于另一个View,但另一个View 的大小是实际的两倍,类似于下图:

当然,上面的图片只是我喜欢看到的一般情况,在这种情况下,我希望将 ScrollView 的contentSize 增加到更高(在运行时)。

我的问题是,当我没有设置相应的约束时,我可以根据需要更改 contentSize,但是当我旋转设备时,我的子视图仍保持 768 的宽度,但如果我设置了自动布局约束当我旋转设备时一切正常,但我无法更新 ScrollView 的contentSize,因为它会根据他的子视图计算他的指标。

我怎样才能完成这种行为?

还有比 ScrollView 更好的 UI 吗?

【问题讨论】:

  • 您是说您希望顶视图具有固定大小(例如 200),然后底视图具有所有其余部分吗? IE。底视图高度 = screenHeight - 200?
  • @Aggressor 是的,下面的视图具有 ScrollView 的其余高度。
  • 你能再解释一下你的底部段落吗?不太清楚
  • @Aggressor 这个问题的主要目标是一旦设置了自动布局约束,如何更改 ScrollView 的 contentSize,因为当你设置另一个视图来代替旧视图时,例如 contentSize 保持在 1024 ,其余内容将无法滚动,并且视图比以前更大

标签: swift ios8 autolayout scrollview


【解决方案1】:

这里是如何设置它,以便您可以垂直滚动,并以编程方式更新 grayView 的高度。

  1. 将scrollView的顶部、左侧、右侧和底部约束到顶层视图的顶部、左侧、右侧和底部。

  2. 将 orangeView 的左、上和右约束到 scrollView 的左、上和右。约束 orangeView 的宽度等于 scrollView 的宽度。为 orangeView 的高度设置约束(比如200)。

  3. 将grayView的左、下、右约束到scrollView的左、下、右。约束 grayView 的宽度等于 scrollView 的宽度。为 grayView 的高度设置一个约束(比如800)。将此约束设置为IBOutlet,以便您可以通过更改其constant 属性来更新其高度。为此,请在 Document Outline 视图中找到约束并从它控制并拖动到您的代码以创建 IBOutlet。给它起一个名字,比如grayViewHeight。当你想设置它时,请执行grayViewHeight.constant = 1000。

  4. 在 orangeView 和 grayView 之间添加垂直空间约束。

现在您的 scrollView 的内容大小已完全指定,您可以在需要时对其进行扩展。 orangeView 和 grayView 会自动水平拉伸以匹配 scrollView 在所有方向上的宽度。

【讨论】:

  • 不是我想要的,但你的回答给了我一个好主意,我解决了问题
【解决方案2】:
  1. 在 Storyboard 中为 UIScrollView 设置委托
  2. 为 scrollView 设置 AutoLayout/AutoResize。
  3. 然后在 viewDidLoad() 方法中添加以下代码。

    var contentRect: CGRect = CGRectZero
    
    for view: UIView in self.scrollView.subviews
    {
        contentRect = CGRectUnion(contentRect, view.frame)
    }
    self.scrollView.contentSize = contentRect.size
    scrollView.addSubview(viewtoscroll)
    

然后运行您的应用程序。它适用于每种屏幕尺寸。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多