展开/折叠在故事板中正常工作但在xib中没有

时间:2017-12-14 05:39:05

标签: ios swift xcode uitableview constraints

我正在尝试创建展开/展开视图(使用tableView ),如下所示:

I

最初只显示3个键值对,当用户点击按钮时,它(表格视图单元格)会展开,再次单击它会折叠。

我的意思是最初看起来像这样:

Simulator screenshot

点击按钮后,它会展开。

我在tableViewCell文件中设置委托并在viewController中进行回调。

在故事板中,我设法让它工作但是当我尝试使用xib做同样的事情时,就会出现问题。

我知道存在一些约束问题。

为此,这些是所有密钥标签所具有的约束:

Key Constraints

这些是值标签的约束:

Value Constraints

在故事板中使用这些约束可以正常工作,但不能在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()
        }
    }

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 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委托实现。

Stack view nib settings