Dey*_*een 52 uitextview ios swift
正如您在此图片中看到的那样
该UITextView变化是根据文本长度的身高,我希望把它调整它是根据文本长度高度.
*我看到了其他问题,但那里的解决方案对我不起作用
Dey*_*een 107
这个作品对我来说,所有其他解决方案都没有.
func adjustUITextViewHeight(arg : UITextView)
{
arg.translatesAutoresizingMaskIntoConstraints = true
arg.sizeToFit()
arg.scrollEnabled = false
}
Run Code Online (Sandbox Code Playgroud)
在Swift 4中,语法arg.scrollEnabled = false已更改为arg.isScrollEnabled = false.
Aka*_*ndu 35
我所要做的就是:
这允许自动布局根据其内容动态调整 textView 的大小。
Sam*_*yes 20
尝试一下:
CGRect frame = self.textView.frame;
frame.size.height = self.textView.contentSize.height;
self.textView.frame = frame;
Run Code Online (Sandbox Code Playgroud)
编辑 - 这是Swift:
var frame = self.textView.frame
frame.size.height = self.textView.contentSize.height
self.textView.frame = frame
Run Code Online (Sandbox Code Playgroud)
Tum*_*Tum 17
在Storyboard/Interface Builder中,只需在"属性"检查器中禁用滚动.
在代码中textField.isScrollEnabled = false应该做的伎俩.
ZAF*_*007 14
斯威夫特4
将它添加到您的班级
UITextViewDelegate
func textViewDidChange(_ textView: UITextView) {
let fixedWidth = textView.frame.size.width
textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
var newFrame = textView.frame
newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
textView.frame = newFrame
}
Run Code Online (Sandbox Code Playgroud)
Ant*_*ong 10
Swift 5,使用扩展:
extension UITextView {
func adjustUITextViewHeight() {
self.translatesAutoresizingMaskIntoConstraints = true
self.sizeToFit()
self.isScrollEnabled = false
}
}
Run Code Online (Sandbox Code Playgroud)
用例:
textView.adjustUITextViewHeight()
Run Code Online (Sandbox Code Playgroud)
并且不关心故事板中 texeView 的高度(首先使用常量)
接下来是DeyaEldeen的回答.
就我而言.我通过添加自动增长textview高度
迅捷3
textView.translatesAutoresizingMaskIntoConstraints = false
textView.isScrollEnabled = false
我添加了这两行代码,对我来说效果很好。
适用于 Swift 5+
func adjustUITextViewHeight(textView : UITextView)
{
textView.translatesAutoresizingMaskIntoConstraints = true
textView.isScrollEnabled = false
textView.sizeToFit()
}
Run Code Online (Sandbox Code Playgroud)
以编程方式直接执行。只需按照以下步骤操作即可
将观察者添加到文本字段的内容长度
[yourTextViewObject addObserver:self forKeyPath:@"contentSize" options:(NSKeyValueObservingOptionNew) context:NULL];
Run Code Online (Sandbox Code Playgroud)实施观察者
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
UITextView *tv = object;
//Center vertical alignment
CGFloat topCorrect = ([tv bounds].size.height - [tv contentSize].height * [tv zoomScale])/2.0;
topCorrect = ( topCorrect < 0.0 ? 0.0 : topCorrect );
tv.contentOffset = (CGPoint){.x = 0, .y = -topCorrect};
mTextViewHeightConstraint.constant = tv.contentSize.height;
[UIView animateWithDuration:0.2 animations:^{
[self.view layoutIfNeeded];
}];
}
Run Code Online (Sandbox Code Playgroud)如果您想在键入过程中一段时间后停止 textviewHeight 增加,请实现此并将 textview delegate 设置为 self。
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if(range.length + range.location > textView.text.length)
{
return NO;
}
NSUInteger newLength = [textView.text length] + [text length] - range.length;
return (newLength > 100) ? NO : YES;
}
Run Code Online (Sandbox Code Playgroud)小智 5
只需与您的textView的高度约束建立联系
@IBOutlet var textView: UITextView!
@IBOutlet var textViewHeightConstraint: NSLayoutConstraint!
Run Code Online (Sandbox Code Playgroud)
并在下面使用此代码
textViewHeightConstraint.constant = self.textView.contentSize.height
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您textView被允许与内容一样高,那么
textView.isScrollEnabled = false
Run Code Online (Sandbox Code Playgroud)
应该可以与自动布局一起使用。
如果要保持textView滚动状态,则需要添加可选的高度限制,
internal lazy var textViewHeightConstraint: NSLayoutConstraint = {
let constraint = self.textView.heightAnchor.constraint(equalToConstant: 0)
constraint.priority = .defaultHigh
return constraint
}()
public override func layoutSubviews() {
super.layoutSubviews()
// Assuming there is width constraint setup on the textView.
let targetSize = CGSize(width: textView.frame.width, height: CGFloat(MAXFLOAT))
textViewHeightConstraint.constant = textView.sizeThatFits(targetSize).height
}
Run Code Online (Sandbox Code Playgroud)
覆盖的原因layoutSubviews()是确保textView正确地水平放置,以便我们可以依靠宽度来计算高度。
由于高度限制设置为较低的优先级,因此如果垂直限制空间textView不足,则的实际高度将小于contentSize。并且textView将是可滚动的。
斯威夫特 4+
这对于自动布局来说非常容易!我将解释最简单的用例。假设UITextView您的UITableViewCell.
textView于contentView有约束。textView。tableView上textViewDidChange。就这样!
protocol TextViewUpdateProtocol {
func textViewChanged()
}
class TextViewCell: UITableViewCell {
//MARK: Reuse ID
static let identifier = debugDescription()
//MARK: UI Element(s)
/// Reference of the parent table view so that it can be updated
var textViewUpdateDelegate: TextViewUpdateProtocol!
lazy var textView: UITextView = {
let textView = UITextView()
textView.isScrollEnabled = false
textView.delegate = self
textView.layer.borderColor = UIColor.lightGray.cgColor
textView.layer.borderWidth = 1
textView.translatesAutoresizingMaskIntoConstraints = false
return textView
}()
//MARK: Padding Variable(s)
let padding: CGFloat = 50
//MARK: Initializer(s)
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
addSubviews()
addConstraints()
textView.becomeFirstResponder()
}
//MARK: Helper Method(s)
func addSubviews() {
contentView.addSubview(textView)
}
func addConstraints() {
textView.leadingAnchor .constraint(equalTo: contentView.leadingAnchor, constant: padding).isActive = true
textView.trailingAnchor .constraint(equalTo: contentView.trailingAnchor, constant: -padding).isActive = true
textView.topAnchor .constraint(equalTo: contentView.topAnchor, constant: padding).isActive = true
textView.bottomAnchor .constraint(equalTo: contentView.bottomAnchor, constant: -padding).isActive = true
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension TextViewCell: UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) {
textViewUpdateDelegate.textViewChanged()
}
}
Run Code Online (Sandbox Code Playgroud)
现在您必须在您的ViewController.
extension ViewController: TextViewUpdateProtocol {
func textViewChanged() {
tableView.beginUpdates()
tableView.endUpdates()
}
}
Run Code Online (Sandbox Code Playgroud)
查看我的repo以获得完整的实现。
这个答案可能晚了,但我希望它可以帮助某人。
对我来说,这两行代码有效:
textView.isScrollEnabled = false
textView.sizeToFit()
Run Code Online (Sandbox Code Playgroud)
但不要为你的Textview设置高度约束
| 归档时间: |
|
| 查看次数: |
70060 次 |
| 最近记录: |