Dưới đây là một giải pháp đầy đủ chức năng, cho những ai muốn nó!
** Giả sử kích thước nội dung của bạn sẽ không vượt quá giới hạn của hai xem văn bản **
Giải pháp này hoạt động bằng cách thêm hai UITextViews để xem bạn, và tách văn bản của bạn giữa chúng. Có vẻ phức tạp, nhưng nó thực sự rất đơn giản!Tôi vừa mới viết một mô tả rất dài dòng :)
Bước 1 - Thêm hai UITextViews để xem của bạn:
tôi thêm mỏ kịch của tôi. Đặt chúng sao cho cái này nằm ngay phía trên cái kia, không có khoảng cách giữa chúng. Đừng lo lắng về việc thiết lập chiều cao (chúng tôi sẽ thiết lập điều đó sau).
Set khăn về quan điểm để họ được gắn với nhau từ phía trên và phía dưới, và các cạnh xung quanh của các container từ tất cả các bên khác, bao gồm cả đệm của bạn mong muốn. nghĩa là gắn chế độ xem văn bản đầu tiên vào vùng chứa từ trên cùng, bên trái và bên phải và đến chế độ xem văn bản thứ hai từ dưới cùng. Buộc chế độ xem văn bản thứ hai vào vùng chứa từ dưới cùng, bên trái và bên phải và đến chế độ xem văn bản đầu tiên từ trên cùng. Điều này sẽ đảm bảo rằng chúng kéo dài một cách thích hợp khi nội dung được đặt.
Đừng đặt bất kỳ hạn chế về chiều cao của các quan điểm, hoặc nếu bạn phải (để tránh cảnh báo từ những hạn chế thanh tra viên), thiết lập chiều cao của một trong những điểm đến được >= 20
, hoặc một số con số tương tự nhỏ.
Tắt chỉ báo cuộn, nảy và di chuyển cho cả chế độ xem văn bản của bạn. Giải pháp này dựa trên các chế độ xem là chiều cao cố định, không thể cuộn, vì vậy nếu bạn muốn nội dung của mình cuộn, bạn nên sử dụng UIScrollView hoặc UITableViewCell làm vùng chứa.
Tạo cửa hàng cho hai quan điểm văn bản mới của bạn trong tập tin xem điều khiển của bạn, đặt tên cho chúng một cái gì đó giống như textView1
và textView2
.
Bước 2 - Set textContainerInsets để zero:
Thiết lập thuộc tính textContainerInset trên cả hai quan điểm văn bản bằng không, hoặc là sử dụng User Defined Runtime Các thuộc tính:
hoặc mã:
self.textView1.textContainerInset = UIEdgeInsetsZero;
self.textView2.textContainerInset = UIEdgeInsetsZero;
Điều này sẽ đảm bảo rằng không có không gian hiển thị sẽ ứng dụng tai giữa hai chế độ xem khi nội dung được đặt và không ảnh hưởng đến khoảng cách khác xung quanh lượt xem của bạn.
Bước 3 - Tách nội dung của bạn, thiết lập nó, và cập nhật những đỉnh cao xem:
Đơn giản chỉ cần sao chép đoạn mã sau vào tập tin của bạn xem bộ điều khiển (viewDidLoad
), và thiết lập các biến contentString
nội dung của bạn.
/* Content is split across two UITextViews to avoid max drawing height */
NSString *contentString = @"Some very long piece of text...";
// Set text
NSArray *components = [contentString componentsSeparatedByString:@"\n"];
NSInteger halfLength = [components count]/2;
NSArray *firstHalf = [components subarrayWithRange:NSMakeRange(0, halfLength)];
NSArray *secondHalf = [components subarrayWithRange:NSMakeRange(halfLength, [components count] - halfLength)];
NSString *contentString1 = [firstHalf componentsJoinedByString:@"\n"];
NSString *contentString2 = [secondHalf componentsJoinedByString:@"\n"];
self.textView1.text = contentString1;
self.textView2.text = contentString2;
// Set text view heights
CGFloat fixedWidth1 = self.textView1.frame.size.width;
CGFloat fixedWidth2 = self.textView2.frame.size.width;
CGSize newSize1 = [self.textView1 sizeThatFits:CGSizeMake(fixedWidth1, CGFLOAT_MAX)];
CGSize newSize2 = [self.textView2 sizeThatFits:CGSizeMake(fixedWidth2, CGFLOAT_MAX)];
CGRect newFrame1 = self.textView1.frame;
CGRect newFrame2 = self.textView2.frame;
newFrame1.size = CGSizeMake(fmaxf(newSize1.width, fixedWidth1), MIN(newSize1.height, 8192));
newFrame2.size = CGSizeMake(fmaxf(newSize2.width, fixedWidth2), MIN(newSize2.height, 8192));
self.textView1.frame = newFrame1;
self.textView2.frame = newFrame2;
Mã này tách contentString khoảng ở giữa, tìm kiếm các newline gần nhất. Nếu bạn muốn chia nhỏ nội dung của mình với một nhân vật khác, chỉ cần thay đổi tất cả các lần xuất hiện của \n
ở trên thành bất kỳ nội dung nào bạn muốn chia nhỏ.
Bước 4 - Đặt thùng xem chiều cao của bạn:
Đặt giao diện container của bạn (scrollview, tableViewCell, bất cứ điều gì khác) với chiều cao của hai quan điểm văn bản của bạn, cộng với bất cứ điều gì thêm không gian mà bạn đã thiết lập ở trên và bên dưới chúng.
CGRect viewFrame = self.myView.frame;
viewFrame.size.height = MIN(self.textView1.frame.size.height, 8192) + MIN(self.textView2.frame.size.height, 8192) + kTextViewContainerPadding;
[self.myView setFrame:viewFrame];
(Trong mã của tôi, kTextViewContainerPadding là macro tôi đã đặt thành tổng không gian phía trên và bên dưới hai chế độ xem văn bản, trong vùng chứa của chúng).
Vậy đó! Chúc may mắn.
Vấn đề không phải là văn bản biến mất. Vấn đề là chiều cao của chế độ xem văn bản. Điều này nghe có vẻ như một lỗi thực hiện chính. Làm việc xung quanh mạnh mẽ phụ thuộc vào các chi tiết của giao diện người dùng của bạn. – dasdom
Trông giống như một lỗi, các điều khiển không nên hoạt động như thế. Vui lòng gửi báo cáo lỗi cho Apple. –
@dasdom Thông tin chi tiết về giao diện người dùng của tôi sẽ hữu ích cho bạn? Về cơ bản bất cứ khi nào người dùng cuộn xuống dưới cùng của UIScrollView, nhiều văn bản được thêm vào UITextView và contentSize của UIScrollView được cập nhật. Điều này đang xảy ra trong phương thức scrollViewDidChange – SimplyLearning