繁体   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