如何在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