Cả giải pháp UIScrollView lẫn UITableView mà bạn đã đề xuất đều không hoạt động.
Nếu bạn đặt UIWebView trong UIScrollView, một hoặc cái kia sẽ chặn các cuộn và cuộn ngăn nội dung của nó, nhưng cái kia sẽ không. Tôi không chắc cái nào sẽ, tôi nghĩ nó sẽ là UIScrollView. Trong mọi trường hợp, không có điều khoản nào cho UIScrollView cuộn khi bạn đến cuối cuộn trong UIWebView hoặc ngược lại.
Nếu bạn sử dụng UITableView, UIWebView sẽ cuộn bên trong ô, nhưng UITableView sẽ không cuộn chút nào hoặc UIWebView sẽ không cuộn chút nào và UITableView sẽ xuất hiện. Nếu bạn sử dụng kiểu bảng 'được nhóm', có thể bạn có thể cuộn UIWebView và UITableView, nhưng nó sẽ không phải là loại trải nghiệm cố kết mà bạn đang tìm kiếm. Kỹ thuật duy nhất mà tôi có thể nghĩ là có thể hoạt động là muck xung quanh trong nội bộ của UIWebView và thêm các nút có chứa UIView của bạn và không cho phép thực thể cuộn được sử dụng bởi UIWebView. Điều này nằm ngoài ken của tôi, nhưng these header dumps will get you started. Xin lưu ý rằng nếu Apple thông báo những gì bạn đang làm, họ có thể từ chối ứng dụng của bạn và ngoài ra, nội bộ có thể thay đổi bất kỳ lúc nào, vi phạm mã của bạn. Nếu bạn đi tuyến đường này, hãy thử mã nó theo cách mà chức năng bị thiếu sẽ gây ra một thất bại duyên dáng.
EDIT:
Với một số cuộc thảo luận và thử nghiệm, OP và tôi đã đi đến kết luận rằng nó là rất tốt, và có một cách để làm điều đó mà không dựa vào internals ở tất cả. Tức là, sử dụng chế độ xem cuộn kèm theo và thay đổi kích thước chế độ xem web khi nó đã được tải về kích thước đầy đủ của chế độ xem nội dung riêng. Kích thước này có thể được tìm thấy bằng cách sử dụng [webView sizeThatFits: CGSizeZero].
Nếu bạn muốn sử dụng lối đi riêng UIWebView để thực hiện điều này, tôi có một ví dụ mã ngắn thêm một cái nhìn để xem tài liệu của UIWebView, kể từ khi tôi đã nhận nó tất cả làm việc ra anyway :)
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Override point for customization after app launch
UIView* testView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease];
UIWebView* testWebView = [[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease];
[testView addSubview:testWebView];
[testWebView setDelegate:self];
[testWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com"]]];
[window addSubview:testView];
[window makeKeyAndVisible];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
UIView *insert = [[[UIView alloc] initWithFrame:CGRectMake(0, [[webView _documentView] frame].size.height, 320, 40)] autorelease];
[insert setBackgroundColor:[UIColor greenColor]];
[[webView _documentView] addSubview:insert];
}
tôi đã kết thúc giả mạo nó với HTML và CSS. -webkit-appearance: nút ấn làm cho điều này trở nên ngon miệng hơn. Vấn đề với cách tiếp cận "một giao diện người dùng lớn" là lượt xem có kích thước tối đa 1024x1024 pixel, do đó bạn không nhất thiết phải tải toàn bộ trang vào một trang và dán vào bên trong UIScrollView. Bạn có thể cắt một trang lớn thành các trang nhỏ hơn và sử dụng riêng một UIWebView cho từng phần, nhưng điều này có vẻ như là một giải pháp tồi tệ hơn là chỉ cho vào và làm cho các nút của nội dung trang thực tế. –