2011-05-13 66 views
3

我需要從上到下計算UITextView的高度。我修剪它包含了(所以它只能上升到光標)文本,然後使用的NSString的sizeWithFont:constrainedToSize:lineBreakMode:方法制定出的高度,就像這樣:爲什麼NSString sizeWithFont:返回錯誤的大小?

NSRange range; 
    range.location = noteTextView.selectedRange.location; 
    range.length = noteTextView.text.length - range.location; 

    NSString *string = [noteTextView.text stringByReplacingCharactersInRange:range withString:@""]; 

    CGSize size = [string sizeWithFont:noteTextView.font 
        constrainedToSize:noteTextView.frame.size 
         lineBreakMode:UILineBreakModeWordWrap]; 

    NSLog(@"height is: %f \n", size.height); 

它做我輸入任何東西每次都是這樣。

問題是,當我鍵入NSLog時,它不會記錄高度變化,直到我在新行上輸入4個字符。這就好像sizeWithFont方法正好是四個字符一樣。這裏的一對夫婦的截圖顯示了我的意思: Height with three characters on line Height with four characters on line

誰能告訴我是怎麼回事?

+3

問題可能是文本視圖在顯示文本時在邊上有邊距,所以它的實際寬度小於textview的幀寬度 – Vladimir 2011-05-13 10:42:49

+0

@Vladimir - 爲什麼是評論而不是答案?我認爲你是絕對正確的,但不能將它作爲一個好的答案投票:) – deanWombourne 2011-05-13 10:46:38

+0

你做了很多假設,UITextView完全呈現完成,因爲你的計算已經完成了......現在或未來,它可能工作或可能不工作。我猜,@弗拉基米爾已經指出了這個問題。 – Eiko 2011-05-13 10:47:31

回答

6

@ Vladimir的評論是正確的我認爲 - NSString沒有考慮到UITextField的邊距。

您可以嘗試獲取光標前面的文本並創建僅包含該文本的新UITextField。

然後,如果您在新文本字段中調用[tempTextField sizeToFit],那麼它的範圍應該是您正在查找的大小。

+0

我剛剛看到弗拉基米爾的評論,我試着計算textView的'contentInset',並從寬度減去它。這樣好多了,但並不完美(現在只有一個字符)。我懷疑,正如Eiko所言,我永遠無法100%確定我確切知道UITextView將如何呈現,所以我想你的方法是我可以確保準確性的唯一方法... – 2011-05-13 10:56:25

+0

+1:很好的工作 – Jhaliya 2011-05-13 11:07:33

+0

啊 - 一個問題:我使用的是UITextView,而不是UITextField,所以沒有sizeToFit方法。希望有一個方法,但是...我會報告回來,如果我找到它。 – 2011-05-13 11:57:47

相關問題