2010-07-03 25 views
15

Trước khi tôi đã sử dụng phương pháp này ....iOS4: Không thể lập trình Di chuyển đến dưới cùng của UITextView

//TextView is a UITextView 

[TextView scrollRangeToVisible:NSMakeRange([TextView length], 0)]; 

... mà sẽ lập trình di chuyển đến cuối của UITextView nhưng nó dường như không để làm việc trong iOS 4.0. Có cách nào để lập trình cuộn đến cuối của một UITextView mà không thay đổi editablility hoặc chèn một điểm (nơi người dùng có thể gõ vào UITextView và có một bàn phím hiển thị)?

Ngoài ra, tôi có cần chỉ định chủ sở hữu tệp làm đại biểu không? Liệu nó có làm cho một sự khác biệt?

+0

Ý anh là gì bởi "không làm việc". Nó có cuộn không? Bàn phím có bị gợi lên không? – TechZen

+0

Khi sử dụng [Cuộn văn bảnRangeToVisible: NSMakeRange ([TextView.text length], 0)]; Nó không cuộn chút nào, nhưng nó không thay đổi .editable của textview (điều này tốt cho tôi). Dự án mẫu thể hiện điều này là http://dl.dropbox.com/u/8256776/Bugsy.zip đó là mẫu ViewController có UITextView và hai nút. khi một nút được nhấn, nó thêm "\ nFive" vào UITextView và cố gắng cuộn xuống cuối (không thành công). khi nhấn nút khác, thêm "\ nSix" vào UITextView và cố gắng cuộn xuống cuối (không thành công). – OscarTheGrouch

+0

bạn có ý nghĩa gì khi không thành công? Bạn đang thử nghiệm điều này trên giả lập? Tôi thấy cuộn văn bản cuộn xuống dưới cùng ... Nếu tôi cuộn nó lên trên cùng, khi tôi nhấn năm hoặc sáu nó cuộn xuống phía dưới. Nó hoạt động hoàn hảo. – SpaceDog

Trả lời

37

UITextView không có thuộc tính độ dài. Mã sau hoạt động tốt cho môi trường của tôi.

[TextView scrollRangeToVisible:NSMakeRange([TextView.text length], 0)]; 
6

Câu trả lời không phù hợp với tôi, nhưng theo những gì bạn sẽ sử dụng cho một TableView hoạt động hoàn hảo. Chỉ cần chắc chắn rằng UITextView của bạn được đặt tên là textView.

if (textView.contentSize.height > textView.frame.size.height) 
{ 
    CGPoint offset = CGPointMake(0, textView.contentSize.height - textView.frame.size.height); 
    [self.textView setContentOffset:offset animated:YES]; 
} 
+1

Có! Điều này hoạt động hoàn hảo (và tôi đã thử tất cả các loại biến thể của scrollRangeToVisible trong ứng dụng của tôi!) – iPhoneDollaraire

+0

Điều này dường như hoạt động tốt hơn câu trả lời được chấp nhận khác! Cảm ơn – Rambatino

0

Đây là những gì tôi sử dụng nó hoạt động tốt. Các shouldScrollTextToBottom được thiết lập bởi quan điểm gọi điện thoại (1 view controller thấp hơn trong ngăn xếp gọi)

(void)viewDidAppear:(BOOL)animated 
{ // scroll to bottom if required 
    if(shouldScrollTextToBottom) 
    [txtMyTextView scrollRectToVisible:CGRectMake(0, 0, txtMyTextView.frame.size.width, txtMyTextView.frame.size.height * 6) animated:YES]; 
} 

6 là một số tùy tiện lớn mà phải là một bội số của chiều cao của UITextView. Tôi đã thấy rằng với giá trị là 5, chế độ xem của tôi không cuộn xuống đáy tuyệt đối.

4

Trong IOS8, một cuộc gọi đến sureLayoutForTextContainer dường như làm cho giải pháp này hoạt động .. Đã cho tôi gần một giờ để theo dõi việc này.

logObject.layoutManager.ensureLayoutForTextContainer(logObject.textContainer) 

    logObject.setContentOffset(CGPointMake(0.0, logObject.contentSize.height), animated:false) 
1

này đã làm việc cho tôi:

[_myTextView.layoutManager ensureLayoutForTextContainer:_myTextView.textContainer]; 
[_myTextView scrollRangeToVisible:NSMakeRange([_myTextView.text length], 0)]; 
Các vấn đề liên quan