如何在 swift 中完全隐藏一个 UITextView?
How to completely hide a UITextView in swift?
我在 UIView
中有一个 UITextView
,我希望用户能够通过点击它来显示和隐藏它。 UITextView
和每边 10 的约束。当前,当用户点击视图时,文本确实会消失,但是您仍然可以看到 UITextView
在哪里,因为 UITextView
所在的位置大约有一行 space。
这是我用来调整 UITextView
:
可见性的代码
if(collapseArray[indexPath.row]){
cell.noteText?.text = nil
}else{
cell.noteText?.text = notesArray[indexPath.row]
}
我已经尝试设置 .isHidden
属性,但我得到了相同的结果。当我使用 UILabel
时,我能够得到想要的结果,但是我希望文本是可编辑的。
这就是我所说的
未隐藏:
隐藏:
正如你所看到的,在单词 test 下面还有一个很大的 space,这是一个 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
}
}
您应该使用 override func awakeFromNib()
而不是 override class func awakeFromNib()
并且您应该在继续并初始化约束之前调用 super.awakeFromNib()
,super.awakeFromNib()
将确保您的 IBOutlets
在您执行第一个初始化约束的语句时初始化。
我在 UIView
中有一个 UITextView
,我希望用户能够通过点击它来显示和隐藏它。 UITextView
和每边 10 的约束。当前,当用户点击视图时,文本确实会消失,但是您仍然可以看到 UITextView
在哪里,因为 UITextView
所在的位置大约有一行 space。
这是我用来调整 UITextView
:
if(collapseArray[indexPath.row]){
cell.noteText?.text = nil
}else{
cell.noteText?.text = notesArray[indexPath.row]
}
我已经尝试设置 .isHidden
属性,但我得到了相同的结果。当我使用 UILabel
时,我能够得到想要的结果,但是我希望文本是可编辑的。
这就是我所说的
未隐藏:
隐藏:
正如你所看到的,在单词 test 下面还有一个很大的 space,这是一个 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
}
}
您应该使用 override func awakeFromNib()
而不是 override class func awakeFromNib()
并且您应该在继续并初始化约束之前调用 super.awakeFromNib()
,super.awakeFromNib()
将确保您的 IBOutlets
在您执行第一个初始化约束的语句时初始化。