我正在做一個測試項目,並且遇到了UITextView的問題。iOS7 UITextView scrollEnabled = YES高度
我在文本視圖中動態獲取文本的內容大小,然後在需要時增加其高度。當高度達到我設定的閾值時,我將設置scrollEnabled = YES來啓用滾動。奇怪的事情似乎在下面的屏幕截圖發生,因爲所示:
臨睡前新的生產線,並實現滾動:
:進入下一個字符,這將使滾動後
之後,再次輸入另一個字符後,文本視圖將在滾動啓用後變爲正常(實際上高度保持與之前的s一樣creen出手,我根據內容的大小改變高度,使之成爲同一高度之前啓用滾動):
任何人碰到這個問題,能夠解決呢?如果這是一個iOS7的bug,還有什麼建議可以創建一個消息輸入文本框?我想知道以前的iOS版本是否有這個問題。
編輯:
好像當TextView中的scrollEnabled是YES,改變textview.frame.size.height發生此問題,那麼高度將重置爲初始高度(如高度在Interface Builder中設置)。不知道這是否有助於解決這個問題。
下面顯示用於編輯所述文本視圖的高度的代碼(其是用於選擇器的方法,其將根據接收到的UITextViewTextDidChangeNotification調用):
NSInteger maxInputFieldWidth = self.inputTextField.frame.size.width;
CGSize maxSize = CGSizeMake(maxInputFieldWidth, 9999);
CGSize neededSize = [self.inputTextField sizeThatFits:maxSize];
NSInteger neededHeight = neededSize.height;
if (self.inputTextField.hasText)
{
[self.inputTextField scrollRangeToVisible:NSMakeRange([self.inputTextField.text length], 0)];
if (neededHeight <= TEXTVIEW_MAX_HEIGHT_IN_USE && neededHeight != previousHeight)
{
previousHeight = neededHeight;
CGRect inputTextFieldFrame = self.inputTextField.frame;
inputTextFieldFrame.size.height = neededHeight;
inputTextFieldFrame.origin.y = TEXTVIEW_ORIGIN_Y;
self.inputTextField.frame = inputTextFieldFrame;
}
else if (neededSize.height > TEXTVIEW_MAX_HEIGHT_IN_USE)
{
if (!self.inputTextField.scrollEnabled)
{
self.inputTextField.scrollEnabled = YES;
CGRect inputTextFieldFrame = self.inputTextField.frame;
inputTextFieldFrame.size.height = TEXTVIEW_MAX_HEIGHT_IN_USE;
inputTextFieldFrame.origin.y = TEXTVIEW_ORIGIN_Y;
self.inputTextField.frame = inputTextFieldFrame;
}
else if (neededHeight != previousHeight)
{
previousHeight = neededHeight;
CGRect inputTextFieldFrame = self.inputTextField.frame;
inputTextFieldFrame.size.height = TEXTVIEW_MAX_HEIGHT_IN_USE;
inputTextFieldFrame.origin.y = TEXTVIEW_ORIGIN_Y;
self.inputTextField.frame = inputTextFieldFrame;
}
}
}
也許你可以上傳你用來調整textview大小的代碼? – Tcharni
剛剛編輯的問題,添加了代碼塊來調整textview,self.inputTextField是UITextView –
似乎沒有任何錯誤的代碼。嘗試放置previousHeight = neededHeight;在if(!self.inputTextField.scrollEnabled)循環中,並查看它是否有效。 – Tcharni