SORU
26 EYLÜL 2013, PERŞEMBE


iOS7 UİTextView contentsize.yükseklik alternatif

İOS uygulamaları iOS 7 için 6.1 birini taşımaya çalışıyorum. Düzeltme genişliği olan UITextView bir yerde bir düzen kullanıyorum, ama yüksekliği contentsize dayanmaktadır. İçin 6.1 contentsize kontrol iOS.yükseklik ve textview çerçeve yüksekliği ayarlamak için yeterli ama yine de iOS 7 üzerinde çalışmıyor.

O zaman nasıl sabit genişlik UITextView ama dinamik bir yükseklik metin oluşturmak gösteriyor olabilir miyim?

NOT: Interface Builder ile kod değil. bu görüşler yaratıyorum

CEVAP
28 EYLÜL 2013, CUMARTESİ


Bu aşağıdaki kod ile, sizin UİTextView yüksekliği sabit bir genişlik (ve bir önceki sürüm iOS 7 üzerinde çalışıyor) göre değiştirebilirsiniz :

- (CGFloat)textViewHeightForAttributedText:(NSAttributedString *)text andWidth:(CGFloat)width
{
    UITextView *textView = [[UITextView alloc] init];
    [textView setAttributedText:text];
    CGSize size = [textView sizeThatFits:CGSizeMake(width, FLT_MAX)];
    return size.height;
}

Bu fonksiyon ile, bir NSAttributedString ve yüksekliği gerekli döndürmek için sabit bir genişlik alacak.

Eğer belirli bir yazı tipi ile bir metin çerçeve hesaplamak istiyorsanız aşağıdaki kodu kullanmanız gerekir :

- (CGSize)text:(NSString *)text sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size
{
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
    {
        CGRect frame = [text boundingRectWithSize:size
                                          options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                       attributes:@{NSFontAttributeName:font}
                                          context:nil];
        return frame.size;
    }
    else
    {
        return [text sizeWithFont:font constrainedToSize:size];
    }
}

SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO senin önek ekleyebilirsiniz.proje olarak: pch dosyası

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

Ayrıca önceki test SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) değiştirebilirsiniz :

if ([text respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)])‌

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • andyabc45

    andyabc45

    1 Mayıs 2011
  • ThePhestor

    ThePhestor

    22 Mart 2011
  • tinycammonitor

    tinycammonit

    14 Aralık 2010