2010-01-27 26 views
11

Tôi đã thực hiện một số tìm kiếm trên Stack Overflow và Google, nhưng tôi không thể tìm thấy giải pháp cho vấn đề của mình.Tự động hóa UITextView và UIScrollView

Tôi có Chế độ xem chi tiết cho một sản phẩm bao gồm UIScrollView và một vài bản phụ (UIImageView, UILabel, UITextView). Bạn có thể tìm thấy một ví dụ here.

Trước tiên, tôi muốn tự động chỉnh sửa UITextView (không phải văn bản chính nó!) Ở độ cao tương ứng. Sau đó, tôi muốn tự động hóa toàn bộ UIScrollView để nó phù hợp với chiều cao của UITextView của tôi và các phần tử ở trên nó. Tôi đã thử đoạn mã sau:

myUITextView.frame = CGRectMake(2.0, 98.0, 316.0, self.view.bounds.size.height); 

[scrollView setContentOffset:CGPointMake(0.0, 0.0) animated:NO]; 
scrollView.contentSize = CGSizeMake(320.0, 98.0 + [myUITextView frame].size.height); 

[self.view addSubview:scrollView]; 

98,0 + [myUITextView khung] .size.height) vì suy nghĩ của tôi là: Sau khi nhận được chiều cao của myUITextView, thêm chiều cao của subviews khác (98,0) cho nó.

Rất tiếc, nó không hoạt động tốt. Tùy thuộc vào nội dung của UIScrollView, nó quá ngắn hoặc quá dài. Tôi đã làm một số khai thác gỗ với kết quả là chiều cao của UITextView luôn giống nhau:

2010-01-27 14: 15: 45,096 MyApp [1362: 207] [myUITextView khung] .size.height: 367,000000

Cảm ơn!

Trả lời

0

Một UITextView sẽ không tự động thay đổi kích cỡ chính nó thành nội dung của nó (không xa như tôi biết anyway) vì vậy bạn cần phải có được kích thước của văn bản chính mình và kích thước UIView cho phù hợp.

Các chức năng trên this page sẽ giúp - bạn có thể sử dụng chúng để có được chiều rộng và chiều cao của một chuỗi, một cái gì đó giống như

// Get the size that the string will render at 
NSString *contents = @"This is the content of your UITextView"; 
CGSize areaSize = [contents sizeWithFont:myView.font forWidth:myView.frame.size.width lineBreakMode:UILineBreakModeWordWrap]; 

// Then set the frame of your UITextView to be the right size 
myView.bounds = CGRectMake(0, 0, areaSize.width, areaSize.height); 

Sau đó, bạn có thể bố trí các thành phần khác xung quanh nó.

Hope this helps,

S

PS Cảnh báo, các liên kết đến các tài liệu là đúng nhưng mã ví dụ của tôi là chưa được kiểm tra, xin lỗi :)

+0

Cảm ơn sự giúp đỡ của bạn. Có vẻ như sizeWithFont: forWidth: lineBreakMode: chỉ hoạt động cho một dòng văn bản. Tôi đã thử sizeWithFont: constrainedToSize: lineBreakMode: và nó hoạt động. Đôi khi nó không tính chiều cao chính xác. Tôi đoán đó là vì một số ngắt dòng trong nguồn văn bản của tôi vì vậy tôi đã thêm 30 px vào nút. – dennis3484

+0

Tôi vừa kiểm tra các tài liệu và bạn hoàn toàn đúng, xin lỗi về điều đó! Tôi đã có vấn đề với nó đôi khi trở về chiều cao sai quá và tôi sử dụng chính xác cùng một giải pháp bạn đã làm - thêm 30px :) – deanWombourne

22

Có thực sự là một cách rất dễ dàng để làm thay đổi kích thước UITextView về chiều cao chính xác của nó bằng cách sử dụng contentSize của nó.

CGRect frame = _textView.frame; 
frame.size.height = _textView.contentSize.height; 
_textView.frame = frame; 

Một điều cần lưu ý là các contentSize đúng là chỉ có sẵn sau các UITextView đã được thêm vào vùng đang xem với addSubview. Trước đó, nó tương đương với frame.size

+0

hoạt động như một sự quyến rũ – Krystian

Các vấn đề liên quan