gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 14:21:34 25 4
gpt4 key购买 nike

我正在使用从数据库 (firebase) 获取的数据在我的应用中构建一个滚动提要。我在 Swift 方面不是很有经验,因为我所做的大部分工作都是网页设计。我正在寻找的是调整 UIView 高度的好方法。这是我目前拥有的(固定高度):enter image description here

这是我的 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
}

我通常使用 HTML div 等,所以我很难弄清楚如何设置它们的样式。任何关于如何以编程方式调整对我的事件 View 中的 UILabel 的约束的信息或教程链接也很受欢迎。

最佳答案

如何计算所需的高度似乎是个问题。虽然有很多方法可以做到这一点,但其中一种方法是这样的:

    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 函数放在一个扩展中,但这不是必需的。

关于ios - Swift:使用编程大小的 UIView 制作垂直滚动提要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51888109/

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