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
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);
Tüm karşılaştırmalar İEEE754 NaN değer...
Dize için Jdbctemplate sorgu: EmptyRes...
Hata Kodu 403 ölümcül dönen Gıt için b...
Java nasıl insan okunabilir biçime bay...
İleti Boyutu Artırmak için Nasıl XML -...