我已将属性textContainerInset
和lineFragmentPadding
设置为零,如此代码所示,这要归功于此SO answer删除了填充和边距。
// this is inside a UITextView Subclass
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.textContainerInset = .zero
self.textContainer.lineFragmentPadding = 0
}
以下是UITextView
在有文字时的呈现方式
这里有多行
以下是没有文字的呈现方式
如果0
的文字为空,是否可以设置高度UITextView
?
修改:
UITextView
上没有使用约束,我没有计划设置高度限制,因为我希望此UITextView
根据自动调整大小文字正在设置
这是UITableViewCell中的isScrollEnabled = false
UITextView,它会根据从api服务器获取的数据自动调整大小。
关于:
语言:Swift 3.2
IDE:Xcode 9.2
答案 0 :(得分:1)
您可以为TVw设置两个高度限制。一个具有您想要的高度,另一个具有0高度和较低优先级。
然后在TextView的委托上做类似的事情:
func textViewDidChange(_ textView: UITextView) {
constraint.isActive = textView.text.count != 0
}
答案 1 :(得分:1)
感谢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
答案 2 :(得分:0)
试试这段代码:
CGSize sizeThatFitsTextView = [TextView sizeThatFits:CGSizeMake(TextView.frame.size.width, MAXFLOAT)];
TextViewHeightConstraint.constant = sizeThatFitsTextView.height;
答案 3 :(得分:-1)
另一种可能的解决方案是在InterfaceBuilder中为height == 0
添加一个约束,将其设置为isActive == false
并为其指定一个自定义标识符。
在代码中需要时使用以下命令激活/停用它:
textView.constraints.first { $0.identifier == "theConstrainIdentifier" }?.isActive = false // or true
答案 4 :(得分:-2)
这可能是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;
}
}