Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在swift中完全隐藏UITextView?_Swift_Uiview_Uilabel_Uitextview - Fatal编程技术网

如何在swift中完全隐藏UITextView?

如何在swift中完全隐藏UITextView?,swift,uiview,uilabel,uitextview,Swift,Uiview,Uilabel,Uitextview,我在UIView中有一个UITextView,我希望用户能够通过点击它来显示和隐藏它。UITextView,每侧限制为10。当前,当用户点击视图时,文本确实会消失,但是您仍然可以看到UITextView的位置,因为UITextView的位置大约有一行空间 下面是我用来调整UITextView可见性的代码: if(collapseArray[indexPath.row]){ cell.noteText?.text = nil }else{ cell.noteText?.text =

我在
UIView
中有一个
UITextView
,我希望用户能够通过点击它来显示和隐藏它。
UITextView
,每侧限制为10。当前,当用户点击视图时,文本确实会消失,但是您仍然可以看到
UITextView
的位置,因为
UITextView
的位置大约有一行空间

下面是我用来调整
UITextView
可见性的代码:

if(collapseArray[indexPath.row]){
    cell.noteText?.text = nil
}else{
    cell.noteText?.text = notesArray[indexPath.row]
}
我尝试设置
.ishiden
属性,但得到了相同的结果。当我使用
UILabel
时,我能够得到想要的结果,但是我希望文本是可编辑的

这就是我要说的

不隐藏:

隐藏的:

正如您所看到的,单词test下面仍然有一个很大的空间,这是一个
UILabel
,它的所有约束条件都是10

下面是我用于给出以下答案的代码:

class NoteTableViewCell: UITableViewCell, UITextViewDelegate {
    
    @IBOutlet weak var noteTitle: UILabel!
    @IBOutlet weak var noteText: UITextView!
    @IBOutlet weak var cardView: UIView!
    
    var textViewHeightConstraint: NSLayoutConstraint!
    
    override class func awakeFromNib() {
        textViewHeightConstraint = noteText.heightAnchor.constraint(equalToConstant: 0)
        textViewHeightConstraint.priority = .defaultLow
        textViewHeightConstraint.isActive = true
    }
}
但是,这给了我一个错误:

Instance member 'noteText' cannot be used on type 'NoteTableViewCell'

在单元格中,保留对textView
var textViewHeightConstraint:NSLayoutConstraint的高度约束的引用,可能在awakefromNib中,请注意常量为0,优先级较低

        textViewHeightConstraint = noteText.heightAnchor.constraint(equalToConstant: 0)
        textViewHeightConstraint.priority = .defaultLow
        textViewHeightConstraint.isActive = true
在逻辑中,切换约束的优先级

if(collapseArray[indexPath.row]){
    cell.textViewHeightConstraint.priority = .required //this should set textView height to 0
}else{
    cell.textViewHeightConstraint.priority = .defaultLow //this should set it back
}
cell.textViewHeightConstraint.isActive = true
cell.layoutIfNeeded()
编辑:

由于OP在
awakeFromNib
中初始化约束属性时遇到问题,我正在更新下面的答案

class NoteTableViewCell: UITableViewCell, UITextViewDelegate {

    @IBOutlet weak var noteTitle: UILabel!
    @IBOutlet weak var noteText: UITextView!
    @IBOutlet weak var cardView: UIView!

    var textViewHeightConstraint: NSLayoutConstraint!

    override func awakeFromNib() {
        super.awakeFromNib()
        textViewHeightConstraint = noteText.heightAnchor.constraint(equalToConstant: 0)
        textViewHeightConstraint.priority = .defaultLow
        textViewHeightConstraint.isActive = true
    }
}

您应该使用
重写func awakeFromNib()
而不是
重写类func awakeFromNib()
并且应该在继续初始化约束之前调用
super.awakeFromNib()
将确保在执行初始化约束的第一条语句时,您的
IBOutlets
已初始化。

隐藏不会更改约束,只会使其不可见。您可能对
UIStackView
感兴趣。否则,您可以使用约束来执行此操作。这看起来像TableView单元格,对吗?单元格是通过XIB构建的还是以编程方式完成的?我将变量
textViewHeightConstraint
添加到我的单元格类中,并在
AwakeFromNib
中初始化,我得到了错误:
实例成员“noteText”不能用于类型“NoteTableViewCell”
您一定再次进行了一些语法错误检查,但没有将初始化放在
awakeFromNib
中,而是将其放在
cellForRowAt
@david:嘿,很抱歉,这里已经很晚了,所以我无法回复,您不应该在
cellForRowAt
中初始化它,每次滚动单元格时都会调用
cellForRowAt
,这意味着您将一次又一次地为每个单元格创建新约束,而不是只创建一次约束
awakeFromNib
对于每个单元格只调用一次,这是添加此类约束的最佳位置。语句
textViewHeightConstraint=noteText.heightAnchor.constraint(equalToConstant:0)
只应在
cell.textViewHeightConstraint.priority=
cellForRowAt中的单元格中执行一次,因此我要求放置
textViewHeightConstraint=noteText.heightAnchor.constraint(EqualToConstraint:0)
在awakefromnib中,其中作为逻辑部分(更新约束优先级
cell.textViewHeightConstraint.priority=
)应放在
cellForRowAt