Otomatik düzen kullanarak metne genişleyen UITextView


163

Tamamen otomatik düzen programlı kullanılarak düzenlenmiş bir görünüm var. Üstünde ve altında öğeleri ile görünümün ortasında bir UITextView var. Her şey iyi çalışıyor, ancak metin eklendiğinde UITextView genişletmek istiyorum. Bu, genişledikçe altındaki her şeyi aşağı itmelidir.

Bunu "yaylar ve payandalar" şekilde nasıl yapacağımı biliyorum, ama bunu yapmanın bir otomatik düzen yolu var mı? Düşünebilmemin tek yolu, her büyümesi gerektiğinde kısıtlamayı kaldırıp yeniden eklemektir.


5
Metin görünümü için bir yükseklik sınırlaması için bir IBOutlet yapabilir ve sadece büyümesini istediğinizde sabiti değiştirebilirsiniz, kaldırmanıza ve eklemenize gerek yoktur.
rdelmar

4
2017, sizi sık sık tutan büyük bir ipucu: SADECE VIEWDID> APPEAR'dan sonra ayarladıysanız işe yarar.
Fattie

2
ipucu No2: [someView.superView layoutIfNeeded] öğesini çağırırsanız O zaman viewWillAppear ();)
Yaro

Yanıtlar:


30

UITextView içeren görünüme, boyutu setBoundsAutoLayout ile atanacaktır . Ben de öyle yaptım. Denetim, başlangıçta olması gerektiği gibi diğer tüm kısıtlamaları kurar ve sonunda UITextView yüksekliği için özel bir kısıtlama koydum ve bunu bir örnek değişkeninde sakladım.

_descriptionHeightConstraint = [NSLayoutConstraint constraintWithItem:_descriptionTextView
                                 attribute:NSLayoutAttributeHeight 
                                 relatedBy:NSLayoutRelationEqual 
                                    toItem:nil 
                                 attribute:NSLayoutAttributeNotAnAttribute 
                                multiplier:0.f 
                                 constant:100];

[self addConstraint:_descriptionHeightConstraint];

İn setBoundsyöntemi, o zaman sabitinin değeri değiştirilir.

-(void) setBounds:(CGRect)bounds
{
    [super setBounds:bounds];

    _descriptionTextView.frame = bounds;
    CGSize descriptionSize = _descriptionTextView.contentSize;

    [_descriptionHeightConstraint setConstant:descriptionSize.height];

    [self layoutIfNeeded];
}

4
Kısıtlamayı UITextViewDelegate'in 'textViewDidChange:' öğesinde de güncelleyebilirsiniz
LK__

2
Güzel çözüm. Ayrıca, kısıtlamayı Interface Builder'da oluşturabileceğinizi ve bir çıkış kullanarak bağlayabileceğinizi unutmayın. textViewDidChangeBu kullanımı ile birlikte bazı güçlük alt sınıf ve kod yazma kaydetmek gerekir ...
Bob Vork

3
textViewDidChange:Programlı olarak UITextView'a metin eklerken çağrılmayacağını unutmayın .
wanderlust

@BobVork önerisi iyi çalışır XCODE 11 / iOS13, viewWillAppear'da metin görünümü değeri ayarlandığında kısıtlama sabitini ayarlayın ve textViewDidChange'de güncelleyin.
ptc

549

Özet: Metin görünümünüzün kaydırılmasını devre dışı bırakın ve yüksekliğini kısıtlamayın.

Bunu programlı olarak yapmak için aşağıdaki kodu girin viewDidLoad:

let textView = UITextView(frame: .zero, textContainer: nil)
textView.backgroundColor = .yellow // visual debugging
textView.isScrollEnabled = false   // causes expanding height
view.addSubview(textView)

// Auto Layout
textView.translatesAutoresizingMaskIntoConstraints = false
let safeArea = view.safeAreaLayoutGuide
NSLayoutConstraint.activate([
    textView.topAnchor.constraint(equalTo: safeArea.topAnchor),
    textView.leadingAnchor.constraint(equalTo: safeArea.leadingAnchor),
    textView.trailingAnchor.constraint(equalTo: safeArea.trailingAnchor)
])

Bunu Interface Builder'da yapmak için metin görünümünü seçin, Nitelikler Denetçisinde Kaydırma Etkin'in işaretini kaldırın ve kısıtlamaları manuel olarak ekleyin.

Not: Metin görünümünüzün üstünde / altında başka görünümleriniz varsa, UIStackViewhepsini düzenlemek için a seçeneğini kullanın.


12
Benim için çalışıyor (iOS 7 @ xcode 5). Uyarı, IB'de "kaydırma etkin" seçeneğinin işaretini kaldırmanın yardımcı olmayacağıdır. Programlı olarak yapmalısınız.
Kenneth Jiang

10
Metin görünümünde maksimum yüksekliği nasıl ayarlayabilirim ve ardından içeriği metin görünümünün yüksekliğini aştıktan sonra metin görünümünün kaydırılmasını nasıl sağlayabilirim?
ma11hew28

3
@iOSGeek sadece UITextView alt sınıf oluşturup üzerine intrinsicContentSizeböyle - (CGSize)intrinsicContentSize { CGSize size = [super intrinsicContentSize]; if (self.text.length == 0) { size.height = UIViewNoIntrinsicMetric; } return size; }. Senin için işe yarayıp yaramadığını söyle. Kendim test etmedim.
manuelwaldner

1
Bu özelliği ayarlayın ve UITextView'i UIStackView'e koyun. Voilla - kendini yeniden boyutlandırma textView!)
Nik Kov

3
Bu cevap altındır. Xcode 9 ile, IB'deki onay kutusunu devre dışı bırakırsanız da çalışır.
bio

48

İşte hepsini otomatik düzen ile yapmayı tercih edenler için bir çözüm:

Boyut Müfettişinde:

  1. İçerik sıkıştırma direnci önceliğini dikey olarak 1000'e ayarlayın.

  2. Kısıtlamalar'da "Düzenle" yi tıklayarak kısıtlama yüksekliği önceliğini düşürün. Sadece 1000'den az yap.

resim açıklamasını buraya girin

Özellik Denetçisinde:

  1. "Kaydırma Etkin" seçeneğinin işaretini kaldırın

Bu mükemmel çalışıyor. Yüksekliği ayarlamadım. UItextview'in dikey sıkıştırma direncinin 1000'e olan önceliğinin arttırılması sadece gerekliydi. UItextView'ın bazı ekleri vardır, bu nedenle kaydırma devre dışı bırakıldığında bile içeriğinde hiç içerik olmasa bile UItextview en az 32 yüksekliğe ihtiyaç duyacağı için otomatik düzenleme hataları verir.
nr5

Güncelleme: Yüksekliğin en az 20 veya başka bir şey olmasını istiyorsanız yükseklik kısıtlaması gerekir. Diğer bilge 32, min yükseklik olarak kabul edilecektir.
nr5

@ Yardımcı olduğunu duyduğuma sevindim.
Michael Revlis

@MichaelRevlis, Bu harika çalışıyor. ancak büyük bir metin olduğunda metin görüntülenmez. diğer işlemleri yapmak için metin seçebilirsiniz ancak görünmez. lütfen bana bu konuda yardım edebilir misin? ? kaydırma etkin seçeneğinin işaretini kaldırdığımda olur. textview kaydırma özelliğini etkinleştirdiğimde mükemmel görüntüleniyor ancak metin görünümünün kaymamasını istiyorum.
Bhautik Ziniya

@BhautikZiniya, uygulamanızı gerçek bir cihazda oluşturmaya çalıştınız mı? Bence hata gösteren bir simülatör olabilir. Metin yazı tipi boyutu 100 ile bir UITextView var. Gerçek bir cihazda iyi görüntülenir, ancak metinler bir simülatörde görünmez.
Michael Revlis

38

UITextView bir intrinsicContentSize sağlamaz, bu yüzden alt sınıflandırmanız ve bir tane sağlamanız gerekir. Otomatik olarak büyümesini sağlamak için layoutSubviews içindeki intrinsicContentSize değerini geçersiz kılın. Varsayılan contentInset dışında bir şey kullanırsanız (ki ben bunu önermiyorum), intrinsicContentSize hesaplamasını ayarlamanız gerekebilir.

@interface AutoTextView : UITextView

@end

#import "AutoTextView.h"

@implementation AutoTextView

- (void) layoutSubviews
{
    [super layoutSubviews];

    if (!CGSizeEqualToSize(self.bounds.size, [self intrinsicContentSize])) {
        [self invalidateIntrinsicContentSize];
    }
}

- (CGSize)intrinsicContentSize
{
    CGSize intrinsicContentSize = self.contentSize;

    // iOS 7.0+
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f) {
        intrinsicContentSize.width += (self.textContainerInset.left + self.textContainerInset.right ) / 2.0f;
        intrinsicContentSize.height += (self.textContainerInset.top + self.textContainerInset.bottom) / 2.0f;
    }

    return intrinsicContentSize;
}

@end

1
Bu benim için iyi çalıştı. Buna ek olarak, bu metni görüntülemek için Arayüz Oluşturucu'da 'scrollEnabled' öğesini NO olarak ayarladım, çünkü kaydırma yapmadan tüm içeriğini zaten gösteriyor. Daha da önemlisi, gerçek bir kaydırma görünümünde oturuyorsa, metin görünümünde kaydırmayı devre dışı bırakmazsanız, imlecin metin görünümünün alt kısmına yakın zıplamasını yaşayabilirsiniz.
idStar

Bu iyi çalışıyor. İlginçtir ki setScrollEnabled:, her zaman ayarlamak için geçersiz kılınırken , sürekli NObüyüyen iç içerik boyutu için sonsuz bir döngü elde edersiniz.
Pascal

İOS 7.0, ben de çağırmak için gerekli [textView sizeToFit]yılında textViewDidChange:Otomatik Düzen büyümek ya TextView küçültmek için temsilci geri arama (ve herhangi bağımlı kısıtlamaları yeniden hesaplamak) tuşlara her bastığınızda.
Ocak'ta takip edin

6
Bu, iOS 7.1'de artık gerekli görünmüyor Geriye dönük uyumluluğu düzeltmek ve sağlamak için, durumu -(void)layoutSubviewssarın ve tüm kodu + 11 -(CGSize)intrinsicContentSizeile sarınversion >= 7.0f && version < 7.1felse return [super intrinsicContentSize];
David James

1
@DavidJames bu hala ios 7.1.2'de gerekli, nerede test ettiğinizi bilmiyorum.
Softlion

28

Film şeridi aracılığıyla yapabilirsiniz, sadece "Kaydırma Etkin" seçeneğini devre dışı bırakın :)

Storyboard


2
Bu sorunun en iyi yanıtı
Ivan Byelko

Otomatik Düzen ile çalışırken bu en iyi çözümdür.
JanApotheker

1
Otomatik Düzen ayarları (Satır Aralığı, İzleyen, Üst, Alt, NO Yükseklik / Genişlik ) + Kaydırma devre dışı. ve işte gidiyorsunuz. Teşekkürler!
Farhan Arshad

15

Hala makul bir UI etkileşimi sağlamak için isScrollEnabled true olarak ayarlanmış olabilir durumlarda tamamen nadir değildir buldum. Bunun için basit bir durum, otomatik olarak genişleyen metin görünümüne izin vermek, ancak yine de maksimum yüksekliğini UITableView'da makul bir şeyle sınırlamak istediğiniz zamandır.

Burada, otomatik mizanpajla otomatik genişlemeye izin veren ancak yine de maksimum yüksekliğe sınırlayabileceğiniz ve yüksekliğe bağlı olarak görünümün kaydırılabilir olup olmadığını yönetecek bir UITextView alt sınıfı var. Sınırlamalarınızı bu şekilde ayarlarsanız, varsayılan olarak görünüm süresiz olarak genişler.

import UIKit

class FlexibleTextView: UITextView {
    // limit the height of expansion per intrinsicContentSize
    var maxHeight: CGFloat = 0.0
    private let placeholderTextView: UITextView = {
        let tv = UITextView()

        tv.translatesAutoresizingMaskIntoConstraints = false
        tv.backgroundColor = .clear
        tv.isScrollEnabled = false
        tv.textColor = .disabledTextColor
        tv.isUserInteractionEnabled = false
        return tv
    }()
    var placeholder: String? {
        get {
            return placeholderTextView.text
        }
        set {
            placeholderTextView.text = newValue
        }
    }

    override init(frame: CGRect, textContainer: NSTextContainer?) {
        super.init(frame: frame, textContainer: textContainer)
        isScrollEnabled = false
        autoresizingMask = [.flexibleWidth, .flexibleHeight]
        NotificationCenter.default.addObserver(self, selector: #selector(UITextInputDelegate.textDidChange(_:)), name: Notification.Name.UITextViewTextDidChange, object: self)
        placeholderTextView.font = font
        addSubview(placeholderTextView)

        NSLayoutConstraint.activate([
            placeholderTextView.leadingAnchor.constraint(equalTo: leadingAnchor),
            placeholderTextView.trailingAnchor.constraint(equalTo: trailingAnchor),
            placeholderTextView.topAnchor.constraint(equalTo: topAnchor),
            placeholderTextView.bottomAnchor.constraint(equalTo: bottomAnchor),
        ])
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override var text: String! {
        didSet {
            invalidateIntrinsicContentSize()
            placeholderTextView.isHidden = !text.isEmpty
        }
    }

    override var font: UIFont? {
        didSet {
            placeholderTextView.font = font
            invalidateIntrinsicContentSize()
        }
    }

    override var contentInset: UIEdgeInsets {
        didSet {
            placeholderTextView.contentInset = contentInset
        }
    }

    override var intrinsicContentSize: CGSize {
        var size = super.intrinsicContentSize

        if size.height == UIViewNoIntrinsicMetric {
            // force layout
            layoutManager.glyphRange(for: textContainer)
            size.height = layoutManager.usedRect(for: textContainer).height + textContainerInset.top + textContainerInset.bottom
        }

        if maxHeight > 0.0 && size.height > maxHeight {
            size.height = maxHeight

            if !isScrollEnabled {
                isScrollEnabled = true
            }
        } else if isScrollEnabled {
            isScrollEnabled = false
        }

        return size
    }

    @objc private func textDidChange(_ note: Notification) {
        // needed incase isScrollEnabled is set to true which stops automatically calling invalidateIntrinsicContentSize()
        invalidateIntrinsicContentSize()
        placeholderTextView.isHidden = !text.isEmpty
    }
}

Bonus olarak, UILabel benzeri yer tutucu metin ekleme desteği vardır.


7

Alt sınıflama olmadan da yapabilirsiniz UITextView . Bir bak bakalım Ben iOS 7'de içeriğine bir UITextView ölçüyü nasıl cevabım?

Bu ifadenin değerini kullanın:

[textView sizeThatFits:CGSizeMake(textView.frame.size.width, CGFLOAT_MAX)].height

güncellemek için constantbir textViewbireyin yüksekliği UILayoutConstraint.


3
Bunu nerede yapıyorsunuz ve UITextView uygulamasının ayarlandığından emin olmak için başka bir şey yapıyorsunuz? Bunu yapıyorum ve metin kendisi boyutlarını görüntülemek, ancak metnin kendisi UITextView yüksekliğini yarıya indirir. Metin, yukarıdaki şeyleri yapmadan hemen önce programlı olarak ayarlanır.
chadbag

Genişliği elle ayarlamak istiyorsanız, daha genel olarak scrollEnabled = NO hilesinden daha kullanışlı buldum.
jchnxu

3

Dikkat edilmesi gereken önemli bir nokta:

UITextView bir UIScrollView alt sınıfı olduğundan, UIViewController öğesinin automaticAdjustsScrollViewInsets özelliğine tabidir.

Düzeni ayarlıyorsanız ve TextView, bir UIViewControllers hiyerarşisindeki ilk alt görünümse, otomatik olarak otomatikAdjustsScrollViewInsets doğruysa otomatik olarak beklenmedik davranışlara neden oluyorsa, contentInsets'i değiştirir.

Dolayısıyla, otomatik düzen ve metin görünümleriyle ilgili sorun yaşıyorsanız automaticallyAdjustsScrollViewInsets = false, görünüm denetleyicisini ayarlamayı veya hiyerarşide textView'i ileri taşımayı deneyin .


2

Bu çok daha önemli bir yorum

Vitaminwater'ın cevabının neden işe yaradığını anlamanın anahtarı üç şeydir:

  1. UITextView'in UIScrollView sınıfının bir alt sınıfı olduğunu bilin
  2. ScrollView'un nasıl çalıştığını ve contentSize öğesinin nasıl hesaplandığını anlayın. Daha fazla bilgi için burayı yanıtlayın ve çeşitli çözümleri ve yorumları görün.
  3. ContentSize'in ne olduğunu ve nasıl hesaplandığını anlayın. Buraya ve buraya bakın . Ayrıca, ayarın contentOffsetbüyük olasılıkla başka bir şey olmaması da yardımcı olabilir :

func setContentOffset(offset: CGPoint)
{
    CGRect bounds = self.bounds
    bounds.origin = offset
    self.bounds = bounds
}

Daha fazla bilgi için objc scrollview ve scrollview öğelerini anlama


Bu üçü bir araya getirerek , mantığı sürmek için textView'in gerçek içeriğininSize'nin textView öğesinin AutoLayout kısıtlamaları üzerinde çalışmasına izin vermeniz gerektiğini kolayca anlarsınız . Neredeyse textView gibi bir UILabel gibi çalışıyor

Bunu yapmak için, scrollView'in boyutu, contentSize'ın boyutu ve bir containerView eklenmesi durumunda containerView'in boyutu aynı olacak şekilde kaydırmayı devre dışı bırakmanız gerekir. Aynı olduklarında kaydırma yapmazsınız. Ve ederdin . sahip olan0 contentOffset0 contentOffSet , aşağı kaydırmadığınız anlamına gelir. 1 puan bile yok! Sonuç olarak, textView tamamı uzatılır.

Ayrıca , scrollView'in sınırlarının ve çerçevesinin aynı olduğu anlamına gelen hiçbir şeye değmez . Eğer 5 puan aşağı kaydırarak ardından contentOffset olurdu senin ederken, eşit olacağını0 contentOffset5scrollView.bounds.origin.y - scrollView.frame.origin.y5


1

Tak ve Çalıştır Çözümü - Xcode 9

AutoLayout gibi UILabel, ile bağlantı algılama , metin seçimi , düzenleme ve kaydırma arasında UITextView.

Otomatik olarak işler

  • Güvenli bölge
  • İçerik ekleri
  • Çizgi parçası dolgusu
  • Metin kabı iç metinleri
  • Kısıtlamalar
  • Yığın görünümleri
  • İlişkilendirilmiş dizeler
  • Her neyse.

Bu cevapların birçoğu beni% 90'a getirdi, ama hiçbiri kusursuz değildi.

Bu UITextViewalt sınıfa girin ve iyisiniz.


#pragma mark - Init

- (instancetype)initWithFrame:(CGRect)frame textContainer:(nullable NSTextContainer *)textContainer
{
    self = [super initWithFrame:frame textContainer:textContainer];
    if (self) {
        [self commonInit];
    }
    return self;
}

- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self commonInit];
    }
    return self;
}

- (void)commonInit
{
    // Try to use max width, like UILabel
    [self setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
    
    // Optional -- Enable / disable scroll & edit ability
    self.editable = YES;
    self.scrollEnabled = YES;
    
    // Optional -- match padding of UILabel
    self.textContainer.lineFragmentPadding = 0.0;
    self.textContainerInset = UIEdgeInsetsZero;
    
    // Optional -- for selecting text and links
    self.selectable = YES;
    self.dataDetectorTypes = UIDataDetectorTypeLink | UIDataDetectorTypePhoneNumber | UIDataDetectorTypeAddress;
}

#pragma mark - Layout

- (CGFloat)widthPadding
{
    CGFloat extraWidth = self.textContainer.lineFragmentPadding * 2.0;
    extraWidth +=  self.textContainerInset.left + self.textContainerInset.right;
    if (@available(iOS 11.0, *)) {
        extraWidth += self.adjustedContentInset.left + self.adjustedContentInset.right;
    } else {
        extraWidth += self.contentInset.left + self.contentInset.right;
    }
    return extraWidth;
}

- (CGFloat)heightPadding
{
    CGFloat extraHeight = self.textContainerInset.top + self.textContainerInset.bottom;
    if (@available(iOS 11.0, *)) {
        extraHeight += self.adjustedContentInset.top + self.adjustedContentInset.bottom;
    } else {
        extraHeight += self.contentInset.top + self.contentInset.bottom;
    }
    return extraHeight;
}

- (void)layoutSubviews
{
    [super layoutSubviews];
    
    // Prevents flashing of frame change
    if (CGSizeEqualToSize(self.bounds.size, self.intrinsicContentSize) == NO) {
        [self invalidateIntrinsicContentSize];
    }
    
    // Fix offset error from insets & safe area
    
    CGFloat textWidth = self.bounds.size.width - [self widthPadding];
    CGFloat textHeight = self.bounds.size.height - [self heightPadding];
    if (self.contentSize.width <= textWidth && self.contentSize.height <= textHeight) {
        
        CGPoint offset = CGPointMake(-self.contentInset.left, -self.contentInset.top);
        if (@available(iOS 11.0, *)) {
            offset = CGPointMake(-self.adjustedContentInset.left, -self.adjustedContentInset.top);
        }
        if (CGPointEqualToPoint(self.contentOffset, offset) == NO) {
            self.contentOffset = offset;
        }
    }
}

- (CGSize)intrinsicContentSize
{
    if (self.attributedText.length == 0) {
        return CGSizeMake(UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric);
    }
    
    CGRect rect = [self.attributedText boundingRectWithSize:CGSizeMake(self.bounds.size.width - [self widthPadding], CGFLOAT_MAX)
                                                    options:NSStringDrawingUsesLineFragmentOrigin
                                                    context:nil];
    
    return CGSizeMake(ceil(rect.size.width + [self widthPadding]),
                      ceil(rect.size.height + [self heightPadding]));
}

0

vitaminwater'ın cevabı benim için çalışıyor.

Düzenleme sırasında metin görünümünüzün metni yukarı ve aşağı sekiyorsa [textView setScrollEnabled:NO];, ayarladıktan sonraSize Inspector > Scroll View > Content Insets > Never .

Umarım yardımcı olur.


0

Metin görünümünüzün altına gizli UILabel yerleştirin. Etiket satırları = 0. UITextView kısıtlamalarını UILabel'e (centerX, centerY, width, height) eşit olacak şekilde ayarlayın. TextView öğesinin kaydırma davranışından ayrılsanız bile çalışır.


-1

BTW, bir alt sınıf kullanarak ve içsel içerik boyutunu geçersiz kılan genişleyen bir UITextView oluşturdum. UITextView uygulamasında kendi uygulamanızda araştırmak isteyebileceğiniz bir hata buldum. İşte sorun:

Bir seferde tek harf yazarsanız, genişleyen metin görünümü, büyüyen metni alacak şekilde büyür. Ancak içine bir grup metin yapıştırırsanız, büyümez, ancak metin yukarı kayar ve üstteki metin görünmezdi.

Çözüm: Alt sınıfınızda setBounds: öğesini geçersiz kılın. Bilinmeyen bir nedenden ötürü, yapıştırma, bounds.origin.y değerinin zee olmayan olmasına neden oldu (gördüğüm her durumda 33). Bu yüzden setBounds: üzerine her zaman bounds.origin.y sıfıra ayarlamak için overrode. Sorun düzeltildi.


-1

İşte hızlı bir çözüm:

Metin görünümünüzde clipsToBounds özelliğini false olarak ayarladıysanız, bu sorun oluşabilir. Sadece silerseniz, sorun ortadan kalkar.

myTextView.clipsToBounds = false //delete this line

-3
Obj C:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (nonatomic) UITextView *textView;
@end



#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize textView;

- (void)viewDidLoad{
    [super viewDidLoad];
    [self.view setBackgroundColor:[UIColor grayColor]];
    self.textView = [[UITextView alloc] initWithFrame:CGRectMake(30,10,250,20)];
    self.textView.delegate = self;
    [self.view addSubview:self.textView];
}

- (void)didReceiveMemoryWarning{
    [super didReceiveMemoryWarning];
}

- (void)textViewDidChange:(UITextView *)txtView{
    float height = txtView.contentSize.height;
    [UITextView beginAnimations:nil context:nil];
    [UITextView setAnimationDuration:0.5];

    CGRect frame = txtView.frame;
    frame.size.height = height + 10.0; //Give it some padding
    txtView.frame = frame;
    [UITextView commitAnimations];
}

@end
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.