在 ScrollView 中动态填充 UIView

Posted

技术标签:

【中文标题】在 ScrollView 中动态填充 UIView【英文标题】:populate UIView Dynamically in a ScrollView 【发布时间】:2017-07-29 00:13:04 【问题描述】:

我正在尝试在滚动视图中动态加载 customView。我创建了一个自定义视图(.xib)并将其添加为我在 for 循环中创建的新 UIView 的子视图。它只在最后一个 for 循环中添加 subView。

我不确定这是否是最有效的方法,但我想不出任何其他方法。我试图制作一个副本,但它复制的是同一个。

我找了类似的帖子,但没有找到。

我想这很容易,但我是编码新手。

这是我的代码。

谢谢 Picture of problem I am facing

import UIKit

class ScrollTableViewCell: UITableViewCell  


@IBOutlet weak var scrollView: UIScrollView!

let customView:ViewForScrollView = (Bundle.main.loadNibNamed("ViewForScrollView", owner: self, options: nil)!.first as? ViewForScrollView)!

override func awakeFromNib() 
    super.awakeFromNib()

    self.scrollView.delegate = self
    tileView(weatherHours: 4)





override func setSelected(_ selected: Bool, animated: Bool) 
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state


func tileView(weatherHours : Int)
    let tileWidth : CGFloat = 60
    let tileHeight : CGFloat = 60
    let marginX : CGFloat = 15
    let viewOriginX : CGFloat = 15
    let viewOriginY : CGFloat = 5
    var padding : CGFloat = 0

    for (index) in 1...weatherHours

        customView.label.text = "\(index)"
        let aView = UIView()
        aView.backgroundColor = UIColor.red
        aView.addSubview(customView)

        aView.frame = CGRect(x: padding + marginX, y: viewOriginY, width: tileWidth , height: tileHeight)
        padding = padding + tileWidth + 15
        scrollView.addSubview(aView)

    
    let scrollViewWidth : CGFloat = tileWidth + (padding) + 15
    scrollView.contentSize = CGSize(width: scrollViewWidth , height: 80)
    



extension ScrollTableViewCell : UIScrollViewDelegate



extension UIView
    func copyView() -> UIView
        return (NSKeyedUnarchiver.unarchiveObject(with: 
NSKeyedArchiver.archivedData(withRootObject: self)) as? UIView)!
    

【问题讨论】:

内容高度需要是views + padding之和。我也建议使用表格视图。我想你会发现它更容易。 这可能对你有帮助:github.com/mattneub/Programming-ios-Book-Examples/blob/master/… 滚动视图获取 UIViews,正如我在图片中看到的那样,但我无法在每个 UIView 子视图中添加 customView。只有最后一个。 【参考方案1】:

使用UITableView,通过正确固定约束前导、尾随、顶部和底部,然后设置自动尺寸。

tableView.estimatedRowHeight = 60
tableView.rowHeight = UITableViewAutomaticDimension

注意:当您设置自动维度时,则不需要执行 heightForRowAtIndex方法

【讨论】:

【参考方案2】:

一段时间后,我找到了解决方案。整个方法都是错误的!这是我的制作方法,基本上是正确的标题。对于问题“如何在包含 UIscrollView.xib 的 tableViewcell.xib 中添加可重用的 UIView.xib”

基本上我在 UIView 类中缺少“必需的 init”,并且在实例化视图时也有一些小错误,因为我在编程方面的经验很少。

这里是代码

https://github.com/NorwegianGR/Reusable-UIView-in-a-ScrollView

感谢大家的快速回复!

【讨论】:

以上是关于在 ScrollView 中动态填充 UIView的主要内容,如果未能解决你的问题,请参考以下文章

在 ScrollView 的 ContentView 中拉伸 UIView

在 ScrollView 中加载自定义 UIView

在 UIView 中动态放置标签和按钮

UIView 和 ScrollView 之间的 UIView 过渡翻转

Embedding UITableView 嵌入一个 ScrollView,嵌入一个 UIView

UIScrollView ContentView动态高度约束