首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift视图没有正确隐藏subViews

Swift视图没有正确隐藏subViews
EN

Stack Overflow用户
提问于 2020-10-12 22:49:28
回答 1查看 56关注 0票数 0

底部的更新

在我的ViewController中,我有一个带有CustomCellsTableView。这些cells中显示的内容取决于userInput。我认为解释这个问题的最好方法是展示它:

cells 添加到 tableView**:**中

看上去像预期的那样

问题2.问题:在解散了ViewController 并返回到它之后:

cell

顺便说一句,当我打开Debugger中的View-Hirarchy时,它被正确地显示了!

这里还有另一个更好理解的video:在本例中,我没有添加一个视频,但是当返回到viewController时,它仍然显示了第一个单元格的imageContainerView(阴影)和content

代码:

我的代码非常复杂和混乱,所以我可以在这里跟踪我:

CustomCell**:**中的setupViews

我不认为这很有帮助,但我也不认为setup是问题所在。

代码语言:javascript
复制
func setupViews(){
    
    contentView.addSubview(checkButton)
    contentView.addSubview(mainStackView)
    
    // main StackView
    mainStackView.addArrangedSubview(label)
    
    mainStackView.topAnchor.constraint(equalTo: contentView.topAnchor).isActive = true
    mainStackView.leadingAnchor.constraint(equalTo: checkButton.trailingAnchor, constant: 15).isActive = true
    mainStackView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -30).isActive = true
    mainStackView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor).isActive = true
    
    //constrain wish label
    labelHeightConatraint = label.heightAnchor.constraint(equalToConstant: 50)
    labelHeightConatraint.priority = .defaultHigh
    labelHeightConatraint.isActive = true
    
    // constrain checkButton
    checkButton.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 30).isActive = true
    checkButton.centerYAnchor.constraint(equalTo: contentView.centerYAnchor).isActive = true
    checkButton.widthAnchor.constraint(equalToConstant: 40).isActive = true
    checkButton.heightAnchor.constraint(equalToConstant: 40).isActive = true

    mainStackView.addArrangedSubview(secondaryStackView)
    secondaryStackViewHeightConstraint = secondaryStackView.heightAnchor.constraint(equalToConstant: 90)
    secondaryStackViewHeightConstraint.priority = .defaultHigh
    secondaryStackViewHeightConstraint.isActive = true
    
    secondaryStackView.addArrangedSubview(imageContainerView)
    imageContainerWidthConstraint = imageContainerView.widthAnchor.constraint(equalToConstant: 90)
    imageContainerWidthConstraint.priority = .defaultHigh
    imageContainerWidthConstraint.isActive = true
    imageContainerView.addSubview(shadowLayer)
    shadowLayer.widthAnchor.constraint(equalToConstant: 80).isActive = true
    shadowLayer.heightAnchor.constraint(equalToConstant: 80).isActive = true
    shadowLayer.topAnchor.constraint(equalTo: imageContainerView.topAnchor).isActive = true
    shadowLayer.trailingAnchor.constraint(equalTo: imageContainerView.trailingAnchor, constant: -10).isActive = true
    imageContainerView.addSubview(wishImage)
    wishImage.widthAnchor.constraint(equalToConstant: 80).isActive = true
    wishImage.heightAnchor.constraint(equalToConstant: 80).isActive = true
    wishImage.topAnchor.constraint(equalTo: imageContainerView.topAnchor).isActive = true
    wishImage.trailingAnchor.constraint(equalTo: imageContainerView.trailingAnchor, constant: -10).isActive = true
    
    secondaryStackView.addArrangedSubview(thirdHelperView)
    thirdHelperView.addSubview(thirdStackView)
    thirdHelperViewHeightConstraint = thirdHelperView.heightAnchor.constraint(equalToConstant: 90)
    thirdHelperViewHeightConstraint.priority = .defaultHigh
    thirdHelperViewHeightConstraint.isActive = true
    
    thirdStackView.addArrangedSubview(priceView)
    priceView.heightAnchor.constraint(equalToConstant: 30).isActive = true
    priceView.addSubview(priceImage)
    priceView.addSubview(priceLabel)
    
    thirdStackView.addArrangedSubview(linkView)
    linkView.heightAnchor.constraint(equalToConstant: 30).isActive = true
    linkView.addSubview(linkImage)
    linkView.addSubview(linkTextView)
    
    thirdStackView.addArrangedSubview(noteView)
    noteView.heightAnchor.constraint(equalToConstant: 30).isActive = true
    noteView.addSubview(noteImage)
    noteView.addSubview(noteLabel)

    priceImage.topAnchor.constraint(equalTo: priceView.topAnchor).isActive = true
    priceImage.leadingAnchor.constraint(equalTo: thirdStackView.leadingAnchor).isActive = true
    priceImage.heightAnchor.constraint(equalToConstant: 20).isActive = true
    priceImage.widthAnchor.constraint(equalToConstant: 20).isActive = true
    
    priceLabel.topAnchor.constraint(equalTo: priceView.topAnchor).isActive = true
    priceLabel.leadingAnchor.constraint(equalTo: priceImage.trailingAnchor, constant: 10).isActive = true
    priceLabel.trailingAnchor.constraint(equalTo: priceView.trailingAnchor, constant: -10).isActive = true
    
    linkImage.topAnchor.constraint(equalTo: linkView.topAnchor).isActive = true
    linkImage.leadingAnchor.constraint(equalTo: thirdStackView.leadingAnchor).isActive = true
    linkImage.heightAnchor.constraint(equalToConstant: 20).isActive = true
    linkImage.widthAnchor.constraint(equalToConstant: 20).isActive = true

    linkTextView.topAnchor.constraint(equalTo: linkView.topAnchor).isActive = true
    linkTextView.leadingAnchor.constraint(equalTo: linkImage.trailingAnchor, constant: 10).isActive = true
    linkTextView.trailingAnchor.constraint(equalTo: linkView.trailingAnchor, constant: -10).isActive = true
    
    noteImage.topAnchor.constraint(equalTo: noteView.topAnchor).isActive = true
    noteImage.leadingAnchor.constraint(equalTo: thirdStackView.leadingAnchor).isActive = true
    noteImage.heightAnchor.constraint(equalToConstant: 20).isActive = true
    noteImage.widthAnchor.constraint(equalToConstant: 20).isActive = true

    noteLabel.topAnchor.constraint(equalTo: noteView.topAnchor).isActive = true
    noteLabel.leadingAnchor.constraint(equalTo: noteImage.trailingAnchor, constant: 10).isActive = true
    noteLabel.trailingAnchor.constraint(equalTo: noteView.trailingAnchor, constant: -10).isActive = true
}

更重要的是:cellForRowAt,,实际上根据内容隐藏/显示不同的视图。如您所见,我实际上在ImageContainerView, priceView, linkView & noteView上调用了ImageContainerView, priceView, linkView & noteView,如果内容是空的(在第一个单元格中)

代码语言:javascript
复制
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
    let cell = tableView.dequeueReusableCell(withIdentifier: WhishCell.reuseID, for: indexPath) as! WhishCell
    
    cell.label.text = ""
    cell.linkTextView.text = ""
    cell.priceLabel.text = ""
    cell.noteLabel.text = ""
    cell.wishImage.image = UIImage()
    
    let currentWish = self.wishData[indexPath.row]
    
    cell.label.text = currentWish.name
    cell.linkTextView.hyperLink(originalText: "Link öffnen", hyperLink: "Link öffnen", urlString: currentWish.link)
    cell.priceLabel.text = currentWish.price
    cell.noteLabel.text = currentWish.note
    cell.wishImage.image = currentWish.image
    
    cell.setupSuccessAnimation()
    
    cell.noteView.isHidden = false
    cell.priceView.isHidden = false
    cell.linkView.isHidden = false
    cell.imageContainerView.isHidden = false
    cell.secondaryStackViewHeightConstraint.constant = 0
    cell.thirdHelperViewHeightConstraint.constant = 0
    
    if currentWish.image == nil || !currentWish.image!.hasContent {
        cell.imageContainerView.isHidden = true
        print("but its truue:  \(cell.imageContainerView.isHidden)")
        if currentWish.price != "" {
            cell.thirdHelperViewHeightConstraint.constant += 30
            cell.secondaryStackViewHeightConstraint.constant += 30
        }
        if currentWish.link != "" {
            cell.thirdHelperViewHeightConstraint.constant += 30
            cell.secondaryStackViewHeightConstraint.constant += 30
        }
        if currentWish.note != "" {
            cell.thirdHelperViewHeightConstraint.constant += 30
            cell.secondaryStackViewHeightConstraint.constant += 30
        }
    } else {
        cell.secondaryStackViewHeightConstraint.constant = 90
        cell.thirdHelperViewHeightConstraint.constant = 90
    }
    
    if currentWish.price == "" {
        cell.priceView.isHidden = true
    }
    
    if currentWish.link == "" {
        cell.linkView.isHidden = true
    }
    
    if currentWish.note == "" {
        cell.noteView.isHidden = true
    }
    
    return cell
}

我不知道为什么会这样。我不认为设置有什么问题,因为如果我实际添加了cells,它就会工作。当它真正应该隐藏的时候,它根本就没有隐藏视图。cellheight也如预期的那样工作。只是他妈的藏起来..。

我知道这是很多,但我希望我的问题是明确的。如果你还需要什么就告诉我!

更新:--我在cellForRowAt中添加了两个print-statements,实际上正在打印如下:

代码语言:javascript
复制
    print("but its truue:  \(cell.imageContainerView.isHidden)")
    print("but its truue:  \(cell.shadowLayer.isHidden)")

但它是真的:真的 但它是真的:假的

所以它正确地隐藏了imageConatinerView,而不是shadowLayer,即使shadowLayersubView of imageContainerView?!我被困在这里..。

EN

回答 1

Stack Overflow用户

发布于 2020-10-13 02:49:06

您可以使用UIView调试方法来调试UI。有四种有用的调试方法:

  • hasAmbiguousLayout:
  • exerciseAmbiguityInLayout:
  • exerciseAmbiguityInLayout:
  • _autolayoutTrace:

然后,您可以使用Xcode UI调试来检查您的UI。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64326290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档