我正在尝试创建一个内部包含自定义视图的堆栈视图。此示例中的每个自定义视图都具有相同的信息。由于某种原因,每个子视图都重叠,而不是每个都去,我不知道为什么。我没有任何限制(在布局中)。堆栈视图在滚动视图内,因为可能有很多子视图。
自定义视图代码:
import UIKit
class AddressComponentView: UIView {
@IBOutlet weak var labelStreet: UILabel!
@IBOutlet weak var labelCity: UILabel!
@IBOutlet weak var labelOfficialRegionType: UILabel!
@IBOutlet weak var labelOfficialRegionTitle: UILabel!
@IBOutlet weak var labelCountry: UILabel!
@IBOutlet weak var labelZip: UILabel!
var view: UIView!
func loadData(address: AddressData){
self.labelStreet.text = address.street
self.labelCity.text = address.city
self.labelOfficialRegionType.text = address.region?.officialRegionType
self.labelOfficialRegionTitle.text = address.region?.officialRegionTitle
self.labelZip.text = address.zip
self.labelStreet.sizeToFit()
}
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
这是我如何动态添加子视图(viewContent 是堆栈视图):
viewScroll.contentSize = CGSize(width: 320, height: 1000)
let viewsDictionary = ["stackView":viewContent]
let stackView_H = NSLayoutConstraint.constraints(
withVisualFormat: "H:|-20-[stackView]-20-|", //horizontal constraint 20 points from left and right side
options: NSLayoutFormatOptions(rawValue: 0),
metrics: nil,
views: viewsDictionary)
let stackView_V = NSLayoutConstraint.constraints(
withVisualFormat: "V:|-30-[stackView]-30-|", //vertical constraint 30 points from top and bottom
options: NSLayoutFormatOptions(rawValue:0),
metrics: nil,
views: viewsDictionary)
view.addConstraints(stackView_H)
view.addConstraints(stackView_V)
let addressView = UINib(nibName: "AddressComponent", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! AddressComponentView
addressView.loadData(address: (item?.addressData)!)
viewContent.addArrangedSubview(addressView)
let addressView1 = UINib(nibName: "AddressComponent", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! AddressComponentView
addressView1.loadData(address: (item?.addressData)!) viewContent.addArrangedSubview(addressView1)
这是可怕的结果:
如果我添加 30 个子视图,就会发生这种情况:
另一件非常奇怪的事情是,我将背景自定义视图设置为蓝色,并将其设置为不透明,并且由于某种原因这些属性被忽略了。这就是组件在设计时的样子:现在我正在尝试将这些子视图添加到 UITableView 的原型单元中:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 3 || indexPath.row == 7 {
var text = "Run the app again, and it will look nothing has really changed. You are now using your bioLabel, but it’s just showing one line of text in each cell. Even though the number of lines is set to 0 and your constraints are properly configured so your bioLabel takes up"
let customView1 = UINib(nibName: "CustomView1", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! CustomView1
customView1.frame = CGRect(x:0, y:0, width: 200, height: 60)
customView1.loadData(text: text)
cell.container.addSubview(customView1)
} else {
let customView2 = UINib(nibName: "CustomView2", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! CustomView2
customView2.loadData(text: "aaaaa adfsd")
cell.container.addSubview(customView2)
}
// Configure the cell...
return cell
}
这段代码非常愚蠢,我只是尝试了不同的视图(我创建了 2 个自定义视图)。他们都有大约相同的代码:
class CustomView1: UIView {
@IBOutlet weak var label1: UILabel!
func loadData(text: String){
label1.text = text
}
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
NB cell.container 是我放入原型单元格的视图。