2011-09-06 23 views
6

UITextView satır sayısını bulmak zorunda. UITextView üzerinde numberOfLines gibi bir özellik bulunmamaktadır. Aşağıdaki formülü kullanıyorum ama çalışmıyor. Bunun hakkında bir fikri olan var mı? iOS 3 kullanıyorsanızNasıl UITextView satır sayısını bulmak

int numLines = txtview.contentSize.height/txtview.font.lineHeight; 

cevap

19

, sen leading özelliğini kullanmak gerekir:

int numLines = txtview.contentSize.height/txtview.font.lineHeight; 
: iOS 4 kullanıyorsanız

int numLines = txtview.contentSize.height/txtview.font.leading; 

, sen lineHeight özelliğini kullanmak gerekir

Ve, @ işaretinin işaret ettiği gibi, kesin bir sonuca ihtiyacınız varsa yuvarlama konusunda dikkatli olun.

+1

: Formül (int döküm düşük ile sona eren bir kayan noktalı değeri üreten ciltli). Belki sonucu yuvarlamak daha iyi sonuçlara yol açar: 'int numLines = round (...)' o zaman 0.9999 sonucu 1'e çıkar ve 0 – thomas

+0

@ tomas: True. Bunu cevaba ekledim. –

1

Üzerinde (toplam UIScrollView metin satır numarası almak için UITextView en yazı tipinin satır aralığı ile piksel Metnin yüksekliğini ve bölünmeyi almak için UITextView arasında contentSize özelliğine bakabilirsiniz ve ekran kapalı), hem sarılmış hem de satır kırık metin dahil. UITextInputTokenizer kullanılarak UITextView satır sayısını hesaplamak için

int numLines = txtview.contentSize.height/txtview.font.leading; 
1

Swift 4 yol:

ek olarak
public extension UITextView { 
    /// number of lines based on entered text 
    public var numberOfLines: Int { 
     guard compare(beginningOfDocument, to: endOfDocument).same == false else { 
      return 0 
     } 
     let direction: UITextDirection = UITextStorageDirection.forward.rawValue 
     var lineBeginning = beginningOfDocument 
     var lines = 0 
     while true { 
      lines += 1 
      guard let lineEnd = tokenizer.position(from: lineBeginning, toBoundary: .line, inDirection: direction) else { 
       fatalError() 
      } 
      guard compare(lineEnd, to: endOfDocument).same == false else { 
       break 
      } 
      guard let newLineBeginning = tokenizer.position(from: lineEnd, toBoundary: .character, inDirection: direction) else { 
       fatalError() 
      } 
      guard compare(newLineBeginning, to: endOfDocument).same == false else { 
       return lines + 1 
      } 
      lineBeginning = newLineBeginning 
     } 
     return lines 
    } 
} 

public extension ComparisonResult { 

    public var ascending: Bool { 
     switch self { 
     case .orderedAscending: 
      return true 
     default: 
      return false 
     } 
    } 

    public var descending: Bool { 
     switch self { 
     case .orderedDescending: 
      return true 
     default: 
      return false 
     } 
    } 

    public var same: Bool { 
     switch self { 
     case .orderedSame: 
      return true 
     default: 
      return false 
     } 
    } 
} 
+0

"ComparisonResult" türünün değeri derlenmiyor. Bazı özel uzantılar – Pahnev

İlgili konular