2010-06-15 40 views
6

Tôi đang có một scrollview như là xem chi tiết của ô xem bảng. Có nhiều chế độ xem trên chế độ xem chi tiết như nhãn, nút, v.v ... mà tôi đang tạo thông qua trình tạo giao diện. Những gì tôi đang tạo thông qua trình xây dựng giao diện là tĩnh. Tôi đang đặt mọi thứ ở chế độ xem chiều cao 480.Tính nội dung của scrollview

Nhãn trên bản xem chi tiết của tôi có văn bản động có thể mở rộng đến bất kỳ độ dài nào. Vấn đề là tôi cần phải thiết lập kích thước nội dung của scrollview mà tôi cần chiều cao của nó.

Làm cách nào để đặt chiều cao của scrollview với điều kiện nội dung động?

Trả lời

18

Bạn có thể thử sử dụng scrollview'ers ContentSize. Nó làm việc cho tôi và tôi đã có cùng một vấn đề với việc kiểm soát bằng cách sử dụng nội dung động.

// Calculate scroll view size 
float sizeOfContent = 0; 
int i; 
for (i = 0; i < [myScrollView.subviews count]; i++) { 
    UIView *view =[myScrollView.subviews objectAtIndex:i]; 
    sizeOfContent += view.frame.size.height; 
} 

// Set content size for scroll view 
myScrollView.contentSize = CGSizeMake(myScrollView.frame.size.width, sizeOfContent); 

Tôi làm điều này trong phương pháp được gọi là viewWillAppear trong bộ điều khiển cho chế độ xem giữ cuộn. Đó là điều cuối cùng tôi làm trước khi gọi viewDidLoad trên siêu.

Hy vọng nó sẽ giải quyết được vấn đề của bạn.

// Hannes

+0

Cảm ơn bạn rất nhiều, Hannes .. Tôi đang nghĩ tại sao điều này không tấn công tôi .. – neha

+0

Bạn nhả xem bạn lặp qua, mà loại bỏ chúng khỏi scrollview. Không thể dán mã đúng trong nhận xét, được thêm dưới dạng câu trả lời thay thế. –

0

Tôi đoán không có tự động trong trường hợp của chế độ xem cuộn và nội dung phải được tính toán cho các chế độ xem tĩnh trên màn hình ít nhất và động khi nó được tính toán khi đang di chuyển.

8

Đúng dụ ngắn:

float hgt=0; for (UIView *view in scrollView1.subviews) hgt+=view.frame.size.height; 

[scrollView1 setContentSize:CGSizeMake(scrollView1.frame.size.width,hgt)]; 

Lưu ý rằng số tiền chỉ này cao, ví dụ nếu có hai bài đánh giá bên cạnh chiều cao của họ với cả hai được thêm vào, làm cho số tiền lớn hơn nó nên được. Ngoài ra, nếu có khoảng trống theo chiều dọc giữa các bản xem trước, tổng số sẽ nhỏ hơn mức cần thiết. chiều cao sai lẫn lộn scrollRectToVisible, cho vị trí cuộn ngẫu nhiên :)

Vòng lặp này đang làm việc và thử nghiệm:

float thisy,maxy=0;for (UIView *view in scrollView1.subviews) { 
    thisy=view.frame.origin.y+view.frame.size.height; maxy=(thisy>maxy) ? thisy : maxy; 
} 
+0

Thanx Henrik, điều này thực sự hữu ích! Vì tôi không thể chấp nhận hai câu trả lời, tôi sẽ upvote của bạn .. :) – neha

1

Một cách nào dễ dàng hơn để làm điều này là để tổ bố trí của bạn trong vòng một cái nhìn sau đó đưa rằng quan điểm trong scrollview. Giả sử bạn sử dụng thẻ, công cụ này hoạt động như sau:

UIScrollView *scrollview = (UIScrollView *)[self.view viewWithTag:1]; 
UIView *longView = (UIView *)[self.view viewWithTag:2]; 
scrollview.contentSize = CGSizeMake(scrollView.frame.size.width, longView.frame.size.height); 

Bằng cách đó, chế độ xem dài biết mức độ cao và nội dung của scrollview vừa được đặt để khớp.

1

Điều này tùy thuộc vào loại nội dung bạn sẽ thêm động. Vì vậy, giả sử bạn có một dữ liệu văn bản lớn để hiển thị, sau đó sử dụng UITextView và vì nó là một lớp con của UIScrollView, bạn có thể lấy setContentSize của TextView khi bạn gán nội dung văn bản. Dựa trên đó bạn có thể thiết lập tổng kích thước của UIScrollView.

float yPoint = 0.0f; 
UIScrollView *myScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0f, yPoint, 320.0f, 400.0f)]; 

UITextView *calculatorTextView = [[UITextView alloc] init]; calculatorTextView.text = @"My looong content text ..... this has a dynamic content"; ` 


[calculatorTextView sizeToFit]; 


yPoint = yPoint + calculatorTextView.contentSize.height; // Bingo, we have the new yPoint now to start the next component. 

// Bây giờ bạn biết chiều cao của văn bản và vị trí sẽ kết thúc. Vì vậy, bạn có thể tạo một Label hoặc TextView khác và hiển thị văn bản của bạn ở đó. Bạn có thể thêm các thành phần đó dưới dạng subview vào scrollview.

UITextView *myDisplayContent = [[UITextView alloc] initWithFrame:CGRectMake(0.0f, yPoint, 300.f, calculatorTextView.contentSize.height)]; 

myDisplayContent.text = @"My lengthy text ...."; 
[myScrollView addSubview:myDisplayContent]; 

// Cuối cùng, đặt kích thước nội dung của 'myScrollView' thành tổng chiều dài của khu vực hiển thị.

[myScrollView setContentSize:yPoint + heightOfLastComponent]; 

Điều này phù hợp với tôi.

0
scrollView.contentSize = [scrollView sizeThatFits:scrollView.frame.size] 

tôi tin rằng cũng sẽ làm việc

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