我正在尝试创建展开/展开视图(使用tableView ),如下所示:
最初只显示3个键值对,当用户点击按钮时,它(表格视图单元格)会展开,再次单击它会折叠。
我的意思是最初看起来像这样:
点击按钮后,它会展开。
我在tableViewCell文件中设置委托并在viewController中进行回调。
在故事板中,我设法让它工作但是当我尝试使用xib做同样的事情时,就会出现问题。
我知道存在一些约束问题。
为此,这些是所有密钥标签所具有的约束:
这些是值标签的约束:
在故事板中使用这些约束可以正常工作,但不能在xib中使用。
这是按钮操作:
@IBAction func viewMoreButtonClicked(_ sender: UIButton)
{
print("Selected Button = \(sender.tag)")
if buttonDelegate != nil
{
if sender.isSelected
{
self.view.frame = CGRect(x: self.view.frame.origin.x, y: self.view.frame.origin.y, width: self.view.frame.size.width, height: 212)
}
else
{
self.view.frame = CGRect(x: self.view.frame.origin.x, y: self.view.frame.origin.y, width: self.view.frame.size.width, height: 400)
}
// self.view.frame = CGRect(x: self.view.frame.origin.x, y: self.view.frame.origin.y, width: self.view.frame.size.width, height: 400)
buttonDelegate?.viewMoreButtonClickedDelegate(selectedButton: sender, currentCell: self)
}
}
这是viewController中的委托回调:
func viewMoreButtonClickedDelegate(selectedButton : UIButton, currentCell : CardTableViewCell)
{
DispatchQueue.main.async {
self.selectedIndex = selectedButton.tag
self.cartTableView.beginUpdates()
self.cartTableView.endUpdates()
}
}
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:2)
UIStackView
会为您提供展开和收缩行为,并最大限度地减少您需要的约束数量。在表格单元格中使用其中一个,以获得扩展和折叠的好处。
向xib添加一个垂直堆栈视图,该视图应包含您的键值对视图,每对视图都应放在容器视图中。
将要隐藏的容器视图(即第4-10行)添加到插座集合中,我称之为moreDetailViews
。
当用户点击按钮时,切换这些视图的隐藏状态:
import UIKit
class ViewController: UIViewController {
@IBOutlet var moreDetailViews: [UIView]!
@IBAction func viewMoreButtonClicked(_ sender: UIButton) {
for detailView in moreDetailViews {
detailView.isHidden = !detailView.isHidden
}
}
}
点击按钮时,您与moreDetailViews
集合相关联的视图将在显示和隐藏之间切换。使用垂直轴设置堆栈视图,将对齐方式设置为填充,并将分布设置为相等的间距,并在点击按钮时缩小和展开堆栈视图。
视图应该具有自己的高度,而堆栈视图需要一个位置但没有高度限制 - 它的高度会随着视图的添加而缩小和增长。您应该能够将单元格边缘约束到堆栈视图,以便它可以扩展和收缩堆栈视图,但这可能取决于您的tableview委托实现。