簡體   English   中英

如何刪除空的UITextView上的空白文本容器

[英]How to remove the blank text container on empty UITextView

我已經將屬性textContainerInsetlineFragmentPadding設置為零,如該代碼所示,這要歸功於通過此SO答案刪除了填充和邊距。

// this is inside a UITextView Subclass
required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    self.textContainerInset = .zero
    self.textContainer.lineFragmentPadding = 0
}

這是UITextView包含文本時的呈現方式

在此處輸入圖片說明

這是多行

在此處輸入圖片說明

這是沒有文本時的渲染方式

在此處輸入圖片說明

如果UITextView的文本為空,是否可以使高度為0

編輯

  1. UITextView上沒有使用任何約束,我也不打算設置高度約束,因為我希望根據要設置的文本自動調整UITextView大小

  2. 這是UITableViewCell中的isScrollEnabled = false UITextView,它會根據從api服務器獲取的數據自動調整大小。

關於

語言:Swift 3.2

IDE:Xcode 9.2

您可以為TVw設置兩個高度限制。 一個具有所需的高度,另一個具有0高度且優先級較低。

然后在TextView的委托上執行以下操作:

func textViewDidChange(_ textView: UITextView) {
    constraint.isActive = textView.text.count != 0
}

感謝uhuru的回答,我為我的代碼制定了一個答案,不需要太多的大修。

首先,我以編程方式為UITextView設置了高度限制。

// outside the scope
var contentTextViewConstraint: NSLayoutConstraint?

// inside awakeFromNib
self.contentTextViewConstraint = NSLayoutConstraint(
    item: self.lblContent,
    attribute: NSLayoutAttribute.height,
    relatedBy: NSLayoutRelation.equal,
    toItem: nil,
    attribute: NSLayoutAttribute.notAnAttribute,
    multiplier: 1,
    constant: 0)
self.contentTextViewConstraint?.isActive = false

然后根據String激活/停用約束

// inside the setup
let contentText: String = model.contentText
self.tvContent.text = contentText
self.contentTextViewConstraint?.isActive = contentText.isEmpty

試試這個代碼:

CGSize sizeThatFitsTextView = [TextView sizeThatFits:CGSizeMake(TextView.frame.size.width, MAXFLOAT)];
TextViewHeightConstraint.constant = sizeThatFitsTextView.height;

另一個可能的解決方案是在InterfaceBuilder中為height == 0添加一個約束,將其設置為isActive == false並為其指定一個自定義標識符。

在代碼中需要時使用以下命令激活/停用它:

textView.constraints.first { $0.identifier == "theConstrainIdentifier" }?.isActive = false // or true

這可能是UITextView的錯誤。 嘗試遵循以下代碼:

- (CGSize)intrinsicContentSize {
    CGSize size = [super intrinsicContentSize];
    if ((size.width < FLT_EPSILON || size.height < FLT_EPSILON) && self.textStorage.string.length == 0) {
        return CGSizeZero;
    } else {
        return size;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM