Я пытаюсь создать представление стека с пользовательскими представлениями внутри. Каждое пользовательское представление в этом примере имеет одинаковую информацию. По какой-то причине вместо того, чтобы идти каждый после каждого subviews перекрываются, и я не могу понять, почему. У меня нет ограничений (в макете). Представление стека находится внутри прокрутки, потому что может быть много подпунктов.Почему пользовательские представления в представлении стека перекрываются?
Код пользовательского вида:
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 (адрес: (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 является мнение, что я вкладываю в прототип клетки.
Можете ли вы опубликовать, как результат будет, если вы поместите 3-4 AddressComponent, возможно, он перебирает границы просмотра стека, возможно, у вас должно быть ограничение на высоту AddressComponent, чтобы теперь представление в стеке могло быть большим, чем должно быть. – Markicevic
@ Маркевич, спасибо за ваш ответ. Я добавил больше фотографий в свой пост. Извините за беспорядок с комментариями там, я не мог понять, как правильно их поместить, но теперь вы должны получить эту идею. Я добавил 30 просмотров. – mimic