Zoals je kunt zien in deze afbeelding
de UITextView
verandert de hoogte volgens de tekstlengte, ik wil de hoogte laten aanpassen volgens de tekstlengte.
*Ik zag andere vragen, maar de oplossingen daar werkten niet voor mij
Antwoord 1, autoriteit 100%
dit Werktvoor mij, alle andere oplossingen niet.
func adjustUITextViewHeight(arg : UITextView)
{
arg.translatesAutoresizingMaskIntoConstraints = true
arg.sizeToFit()
arg.scrollEnabled = false
}
In Swift 4 is de syntaxis van arg.scrollEnabled = false
gewijzigd in arg.isScrollEnabled = false
.
Antwoord 2, autoriteit 45%
In Storyboard / Interface Builder schakelt u eenvoudig scrollen uit in de kenmerkcontrole.
In code textField.scrollEnabled = false
zou het lukken.
Antwoord 3, autoriteit 27%
Het enige wat ik hoefde te doen was:
- Stel de beperkingen in voor boven, links en rechtsvan de textView.
- Scrolling uitschakelenin Storyboard.
Hierdoor kan de automatische lay-out de tekstweergave dynamisch aanpassen op basis van de inhoud.
Antwoord 4, autoriteit 18%
Probeer dit eens:
CGRect frame = self.textView.frame;
frame.size.height = self.textView.contentSize.height;
self.textView.frame = frame;
Bewerken- Hier is de Swift:
var frame = self.textView.frame
frame.size.height = self.textView.contentSize.height
self.textView.frame = frame
Antwoord 5, autoriteit 13%
Swift 4
Voeg het toe aan je klas
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
}
Antwoord 6, autoriteit 9%
Gevolgd door het antwoord van DeyaEldeen.
In mijn geval. Ik vergroot de hoogte van de tekstweergave automatisch door
. toe te voegen
swift 3
textView.translatesAutoresizingMaskIntoConstraints = false
textView.isScrollEnabled = false
Antwoord 7, autoriteit 6%
Swift 5, Gebruik extensie:
extension UITextView {
func adjustUITextViewHeight() {
self.translatesAutoresizingMaskIntoConstraints = true
self.sizeToFit()
self.isScrollEnabled = false
}
}
Gebruiksvoorbeeld:
textView.adjustUITextViewHeight()
En let niet op de hoogte van texeView in het storyboard (gebruik eerst een constante)
Antwoord 8, autoriteit 6%
maak gewoon een verband met de hoogtebeperking van uw textView
@IBOutlet var textView: UITextView!
@IBOutlet var textViewHeightConstraint: NSLayoutConstraint!
en gebruik deze code hieronder
textViewHeightConstraint.constant = self.textView.contentSize.height
Antwoord 9, autoriteit 2%
het is eenvoudig om op een programmatische manier te doen. volg gewoon deze stappen
-
voeg een waarnemer toe aan de inhoudslengte van het tekstveld
[yourTextViewObject addObserver:self forKeyPath:@"contentSize" options:(NSKeyValueObservingOptionNew) context:NULL];
-
waarnemer implementeren
-(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]; }]; }
-
als u wilt dat textviewHeight na enige tijd tijdens het typen niet meer toeneemt, implementeert u dit en stelt u textview delegate in op zichzelf.
-(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; }
Antwoord 10, autoriteit 2%
In mijn project is de view-controller betrokken bij veel beperkingen en StackView, en ik stel de TextView-hoogte in als een beperking, en deze varieert op basis van de textView.contentSize.height-waarde.
stap1: koop een IB-stopcontact
@IBOutlet weak var textViewHeight: NSLayoutConstraint!
stap2: gebruik de delegatiemethode hieronder.
extension NewPostViewController: UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) {
textViewHeight.constant = self.textView.contentSize.height + 10
}
}
Antwoord 11, autoriteit 2%
Beter nog swift 4voeg toe als extensie:
extension UITextView {
func resizeForHeight(){
self.translatesAutoresizingMaskIntoConstraints = true
self.sizeToFit()
self.isScrollEnabled = false
}
}
Antwoord 12, autoriteit 2%
SWIFT 4
Verander de grootte tijdens het typen
UITextViewDelegate
func textViewDidChange(_ textView: UITextView) {
yourTextView.translatesAutoresizingMaskIntoConstraints = true
yourTextView.sizeToFit()
yourTextView.isScrollEnabled = false
let calHeight = yourTextView.frame.size.height
yourTextView.frame = CGRect(x: 16, y: 193, width: self.view.frame.size.width - 32, height: calHeight)
}
Verander de grootte bij het laden
func textViewNotasChange(arg : UITextView) {
arg.translatesAutoresizingMaskIntoConstraints = true
arg.sizeToFit()
arg.isScrollEnabled = false
let calHeight = arg.frame.size.height
arg.frame = CGRect(x: 16, y: 40, width: self.view.frame.size.width - 32, height: calHeight)
}
Noem de functie van de tweede optie als volgt aan:
textViewNotasChange(arg: yourTextView)
Antwoord 13
het werkt
func textViewDidChange(_ textView: UITextView) {
let fixedWidth = textviewconclusion.frame.size.width
textviewconclusion.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
let newSize = textviewconclusion.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
var newFrame = textviewconclusion.frame
newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
textviewconclusion.frame = newFrame
}
Antwoord 14
1 Voeg een waarnemer toe aan de inhoudslengte van het tekstveld
yourTextView.addObserver(self, forKeyPath: "contentSize", options: (NSKeyValueObservingOptions.new), context: nil);
2 Observeer implementeren
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
let tv = object as! UITextView;
var topCorrect = (tv.bounds.size.height - tv.contentSize.height * tv.zoomScale)/2.0;
topCorrect = ( topCorrect < 0.0 ? 0.0 : topCorrect );
tv.contentOffset.x = 0;
tv.contentOffset.y = -topCorrect;
self.yourTextView.contentSize.height = tv.contentSize.height;
UIView.animate(withDuration: 0.2, animations: {
self.view.layoutIfNeeded();
});
}
Antwoord 15
Hier zijn twee valkuilen in iOS 8.3 wanneer het wordt geleverd met textView.textContainer.maximumNumberOfLines = 10
Raadpleeg mijn gist, alstublieft.
textView.attributedText = originalContent
let lineLimit = 10
textView.isEditable = true
textView.isScrollEnabled = false
textView.textContainerInset = .zero // default is (8, 0, 8, 0)
textView.textContainer.maximumNumberOfLines = lineLimit // Important condition
textView.textContainer.lineBreakMode = .byTruncatingTail
// two incomplete methods, which do NOT work in iOS 8.3
// size.width可能比maxSize.width小 ————遗憾的是 iOS 8.3 上此方法无视maximumNumberOfLines参数,所以得借助于UILabel
// size.width may be less than maxSize.width, ---- Do NOT work in iOS 8.3, which disregards textView.textContainer.maximumNumberOfLines
// let size = textView.sizeThatFits(maxSize)
// 遗憾的是 iOS 8.3 上此方法失效了,得借助于UILabel
// Does not work in iOS 8.3
// let size = textView.layoutManager.usedRectForTextContainer(textView.textContainer).size
// Suggested method: use a temperary label to get its size
let label = UILabel(); label.attributedText = originalContent
let size = label.textRect(forBounds: CGRect(origin: .zero, size: maxSize), limitedToNumberOfLines: lineLimit).size
textView.frame.size = size
Antwoord 16
Verklaring hier
fileprivate weak var textView: UITextView!
Bel hier je setupview
override func viewDidLoad() {
super.viewDidLoad()
setupViews()
}
Hier instellen
fileprivate func setupViews() {
let textView = UITextView()
textView.translatesAutoresizingMaskIntoConstraints = false
textView.text = "your text here"
textView.font = UIFont.poppinsMedium(size: 14)
textView.textColor = UIColor.brownishGrey
textView.textAlignment = .left
textView.isEditable = false
textView.isScrollEnabled = false
textView.textContainerInset = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)
self.view.addSubview(textView)
self.textView = textView
setupConstraints()
}
Instelbeperkingen hier
fileprivate func setupConstraints() {
NSLayoutConstraint.activate([
textView.topAnchor.constraint(equalTo: view.topAnchor, constant: 20),
textView.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 20),
textView.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -20),
textView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -20),
textView.heightAnchor.constraint(greaterThanOrEqualToConstant: 150),
])
}
Antwoord 17
Telkens wanneer u het formaat van de tekstweergave moet aanpassen aan de inhoud van de binnenkant, zoals in de berichten-app.
Gebruik cocoapods(GrowingTextView), het zal uw leven gemakkelijker maken dan het coderen van het dynamisch formaat wijzigen van tekstweergave op uw eigen.
Antwoord 18
- Zet textView in StackView
- Stel beperkingen in (boven, onder, links, rechts) voor stackView
- Voeg hoogtebeperking toe aan StackView, selecteer deze beperking en stel deze in op ‘Groter dan of gelijk aan’ in Relatie, in het rechterpaneel