Ios Swift:使用编程大小的UIView制作垂直滚动提要

Ios Swift:使用编程大小的UIView制作垂直滚动提要,ios,swift,uiview,uiscrollview,uikit,Ios,Swift,Uiview,Uiscrollview,Uikit,我正在用从数据库(firebase)抓取的数据在我的应用程序中构建一个滚动提要。我对Swift不是很有经验,因为我做的大部分工作都是网页设计。我要找的是一个很好的方法来调整我的UIView的高度。以下是我目前拥有的(固定高度): 下面是我的代码UIView类: class eventView: UIView { let eventDate : UILabel = { let eventDate = UILabel() eventDate.translat

我正在用从数据库(firebase)抓取的数据在我的应用程序中构建一个滚动提要。我对Swift不是很有经验,因为我做的大部分工作都是网页设计。我要找的是一个很好的方法来调整我的UIView的高度。以下是我目前拥有的(固定高度):

下面是我的代码UIView类:

class eventView: UIView {

    let eventDate : UILabel = {
        let eventDate = UILabel()
        eventDate.translatesAutoresizingMaskIntoConstraints = false
        eventDate.numberOfLines = 0
        eventDate.textAlignment = .center
        return eventDate
    }()
    let eventTitle : UILabel = {
    Same thing as eventDate
    }()
    let eventDesc : UILabel = {
    same thing as eventDate
    }()

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = UIColor.lightGray
        self.layer.cornerRadius = 10
        self.addSubview(eventDate)
        eventDate.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
        eventDate.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
        self.addSubview(eventTitle)
        eventTitle.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
        eventTitle.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
        eventTitle.topAnchor.constraint(equalTo: eventDate.bottomAnchor).isActive = true

        self.addSubview(eventDesc)
        eventDesc.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
        eventDesc.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
        eventDesc.topAnchor.constraint(equalTo: eventTitle.bottomAnchor).isActive = true
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
以下是显示以下UIView的我的列表:

    var i = 0
    for data in self.eventViewData {
        let view = eventView(frame: CGRect(x: 0, y: ( CGFloat(170 * i)), width: self.scrollView.frame.width - 20, height: CGFloat(150)))
        view.center.x = self.scrollView.center.x
        view.eventDate.text = data.date
        view.eventTitle.text = data.title
        view.eventDesc.text = data.description
        self.scrollView.addSubview(view)

        i += 1
    }

我通常使用HTMLdiv之类的,所以我很难弄清楚如何设计这些样式。对于如何在my EventView中以编程方式调整UILabel约束的任何信息或教程链接,我们也非常感谢。

我假设您使用的是表视图,为什么不使用动态高度?好参考


本质上,您可以使用“自动布局”为单元格中的每个元素定义相应的顶部和底部约束,对于heightforrow和estimatedheightforrow,return UITableViewAutomaticDimension,表视图委派/数据源方法如何计算所需高度似乎是一个问题。虽然有很多方法可以做到这一点,但一种方法是这样的:

    func heightForView(text:String, font:UIFont, width:CGFloat) -> CGFloat{
        let label:UILabel = UILabel(frame: CGRectMake(0, 0, width, CGFloat.greatestFiniteMagnitude))
        label.numberOfLines = 0
        label.lineBreakMode = NSLineBreakMode.byWordWrapping
        label.font = font
        label.text = text
        label.sizeToFit()
        return label.frame.height
}

    let font = UIFont(name: "Helvetica", size: 20.0)
    var height = heightForView("This is just a load of text", font: font, width: 100.0)
    // apply height to desired view

我自己更喜欢将heightForView函数放在扩展中,但这不是必需的。

只需使用自定大小的tableview单元格即可。我同意。默认设置为自调整大小的表格视图单元格!当iOS免费提供给你这个功能的时候,为什么还要胡闹呢?谢谢你推荐使用table view。我对它了解不多,因为我是swift的新手,但它工作得非常好!谢谢,这很有效,但随着我对这个主题了解的深入,我最终还是切换到了表视图。谢谢分享,下次我需要计算标签的高度时一定会用到它!很高兴听到这个消息,在我看来,桌面视图似乎也是正确的选择。感谢您的复选标记,祝您在项目中好运!早上好,丹尼尔。请不要回滚我的编辑。我的观点是,他们会得到主持人的支持,但我不想走这条路。如果你想了解这里的编辑和策展,请打开一个与我的聊天窗口-我很乐意解释。