SORU
29 Kasım 2012, PERŞEMBE


boundingRectWithSize NSAttributedString için yanlış dönen boyutu

Ben almaya çalışıyorum rect için bir isnat dize, ama boundingRectWithSize değil saygı boyutunu geçtim ve geri dönen bir dörtgen ile bir tek satır yüksekliği karşıtı olarak büyük boy (uzun bir dize). Kodda yüksekliği için çok büyük bir değer de 0 ın altında geçirerek denedim, ama rect döndü hep aynıdır.

CGRect paragraphRect = [attributedText boundingRectWithSize:CGSizeMake(300,0.0)
  options:NSStringDrawingUsesDeviceMetrics
  context:nil];

Bu kırık ya da iade için başka bir şey yapmam gerekiyor mu kaydırılan metin için bir rect mi?

CEVAP
3 Aralık 2012, PAZARTESİ


Bu yöntem çeşitli şekillerde buggy görünüyor. Tek bir not olarak, genişliği kısıtlamaları saygı duymuyor. Bir diğeri, tüm özellikleri NSObject tür (örneğin, CTFontRef _isDefaultFace geçirmeye çalıştı) olduğunu varsaymak gibi görünüyor, çünkü kaza gördüm. Ayrıca dize çizim bir bağlam perde arkasında kesilebilir atfedilen bir dize için sıfır değerli bir öznitelik eklemek için çalışacağından sağlandığında kilitlenmesine.

Bu yöntem tamamen önlemek için tavsiye ederim. Eğer çizmek için gereken her dize için bir framesetter oluşturma yükünü işleyebilir eğer Çekirdek Metin doğrudan dize boyutunu tahmin etmek için kullanabilirsiniz. Tam genişlik kısıtlamaları da onur değil, ama benim deneyim birkaç pikseli içine almak gibi görünüyor.

CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)attrString);
CGSize targetSize = CGSizeMake(320, CGFLOAT_MAX);
CGSize fitSize = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0, [attrString length]), NULL, targetSize, NULL);
CFRelease(framesetter);

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BetterCoder

    BetterCoder

    17 Aralık 2012
  • LardTardProductions's channel

    LardTardProd

    10 NİSAN 2009
  • ThisWeekYT

    ThisWeekYT

    14 Mart 2013