gpt4 book ai didi

ios - 将 View Controller 主视图(self.view) subview 移动到 ScrollView

转载 作者:行者123 更新时间:2023-11-29 01:45:19 29 4
gpt4 key购买 nike

  1. 我有带 subview 和应用约束的 View Controller 。
  2. 问题:我想做的是以编程方式添加 ScrollView 只有 iPhone 4s 设备在 ScrollView 中具有 self.view 的所有 subview 。
  3. ScrollView 应包含 self.view 的所有 subview (我使用 self.view.subviews 添加)。

    1. 我试过的代码

    如果 DeviceType.IS_IPHONE_4_OR_LESS {

        //Add Scrollview to self.view
    let scrollview : UIScrollView = UIScrollView(frame: CGRectMake(0,0,320,480))
    scrollview.showsVerticalScrollIndicator = true;
    scrollview.scrollEnabled = true;
    scrollview.userInteractionEnabled = true;

    // scrollview.addSubview(self.view) /

    let total : NSArray = (self.view.subviews as NSArray).copy() as! NSArray

    //Add elements to scrollview but subviewes don't get scroll
    for subview in total
    {
    scrollview.addSubview(subview as! UIView)
    }
    /// Results in blank white screen. Reason: May be scrollview & self.view pointing to same objects
    for subview in self.view.subviews {

    subview.removeFromSuperview()
    }

    self.view.addSubview(scrollview)

    scrollview.contentSize = CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height+200)

    }
  4. 我知道 Size class & give 问题可以解决。

  5. 我还知道,在 Storyboard中添加 ScrollView 并隐藏所有设备(iPhone 4s 除外)可能有效。

最佳答案

更仔细地查看您的代码,我认为我发现了一些导致您的期望无法得到满足的问题。

let total : NSArray = (self.view.subviews as NSArray).copy() as! NSArray

这不会为 subviews 数组中的每个 View 创建一个副本,它只会创建一个数组副本,其元素与源数组所指向的元素相同。要复制每个元素,您应该执行以下操作:

let total = self.view.subviews.map { $0.copy() }

在代码中,当您将所有这些 View 添加到新的 super View 时,它们会自动从以前的 super View 中删除。所以现在在你对每个元素调用 subview.removeFromSuperview() 的循环中,你正在从刚刚添加它们的新 super View 中删除每个元素,这是有道理的,你最终会空白屏幕。

所以,如果是我,我不会复制所有的 subview ,然后将每个 subview 添加到一个新的父 View 中,因为我知道它们将从之前的父 View 中删除。然后您就不必迭代并删除旧的。

关于ios - 将 View Controller 主视图(self.view) subview 移动到 ScrollView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31993607/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com