2013-09-01 46 views
44

tôi đã gặp phải một cái gì đó hơi lạ với contentInsetsUITextView nội dung inset

Tôi có một UITextView trong kịch bản của tôi với một contentInset 50 trái, như tôi đang cố gắng để thêm một số padding để uitextview tôi

Tuy nhiên , một thanh cuộn xuất hiện ở dưới cùng của uitextview, như được hiển thị bên dưới trong bài kiểm tra này: enter image description here

Tôi đã ấn tượng rằng contentInset squashes uitextview mà không gây ra thanh cuộn ngang này, vậy làm thế nào tôi có thể loại bỏ nhu cầu ngang thanh cuộn và làm mọi thứ - inset AND tất cả văn bản trong uitextview - hiển thị mà không cần thanh cuộn này.

N.B: Tôi không yêu cầu về việc ngăn chặn sự di chuyển theo chiều ngang hoặc không hiển thị thanh cuộn (do đó cắt của văn bản)

Cảm ơn rất nhiều!

Đối atomk (UITextView được gọi là ss)

NSLog(@"Content Size Before %f",self.ss.contentSize.width); Logs: 280 
CGSize size=self.ss.contentSize; size.width=size.width-50; 
[self.ss setContentSize:size]; 
NSLog(@"Content Size After %f",self.ss.contentSize.width); Logs: 230 

có sự khác biệt rõ ràng giữa vùng đang xem với mã được thêm vào so với trước đây nó đã được bổ sung, vì vậy một cái gì đó đang xảy ra sai! (Cảm ơn)

Trả lời

63

UPDATE: Giải pháp này đã cũ như iOS 7.

Xem this answer below. Trong iOS 7.0, các textContainerInset tài sản trên UITextView đã được giới thiệu:

textView.textContainerInset = UIEdgeInsetsMake(0, 50, 0, 0); 

Pre-iOS 7 giải pháp:

Tôi đã theo ấn tượng rằng squashes contentInset các uitextview mà không gây ra ngang này thanh cuộn ...

Tôi e rằng đây không phải là cách contentInset hoạt động với UITextView. Xem Apple's documentation cho contentInset nơi nó nói:

Khoảng cách mà xem nội dung được inset từ xem di chuyển kèm theo ... Sử dụng tài sản này để thêm vào vùng di chuyển xung quanh nội dung.

contentInsetthêm xung quanh nội dung.


Bạn có thể thay đổi contentSize trong viewDidLayoutSubviews sử dụng mã bạn đã bao gồm trên:

- (void)viewDidLayoutSubviews 
{ 
    self.textView.contentInset = UIEdgeInsetsMake(0, 50, 0, 0); 

    NSLog(@"Content Size Before %f",self.textView.contentSize.width); //Logs: 280 
    CGSize size=self.textView.contentSize; 
    size.width=size.width-50; 
    [self.textView setContentSize:size]; 
    NSLog(@"Content Size After %f",self.textView.contentSize.width); //Logs: 230 
} 

Tuy nhiên, điều này gây ra văn bản để được cắt bỏ ở phía bên phải:

UITextView cut off on right side


Cách tốt nhất tôi đã là abl e để đạt được sự xuất hiện của đệm ngang trong một UITextView là vị trí của nó bên trong một container UIView. Trong trường hợp của bạn, chỉ cần tạo một số UIView cùng kích thước với chế độ xem văn bản hiện tại của bạn và thêm chế độ xem văn bản nhỏ hơn 50px bên trong chế độ xem vùng chứa.

Cách giải quyết này có thể gây ra sự cố nếu bạn có nền cho chế độ xem văn bản của mình, nhưng từ ảnh chụp màn hình của bạn ở trên, có vẻ như đó không phải là vấn đề đối với bạn.

UITextView (khung màu đỏ) bên UIView container:

UITextView inside container UIView

Nếu bạn UITextView không có một nền tảng, xem:

Hy vọng điều đó sẽ hữu ích và nếu có ai tìm được giải pháp tốt hơn, tôi rất muốn nghe về nó!

+1

Đã xem mã GitHub của bạn. Điều đó có vẻ tuyệt vời; phong cách thực sự sạch sẽ và chú ý nhiều. –

160

Trong iOS 7 UITextView được dựa trên TextKit và có thuộc tính mới textContainerInset. Nó hoạt động giống như bạn mong đợi:

UITextView *textView = ...; 
// Left inset of 50 points 
textView.textContainerInset = UIEdgeInsetsMake(0.0, 50.0, 0.0, 0.0); 
+3

điều này hoạt động giống như một sự quyến rũ, tôi không biết tại sao nó không phải là trên đầu trang :) –

+2

Điều này sẽ là câu trả lời được chấp nhận ngay bây giờ! – simme

+3

vâng đây phải là câu trả lời được chấp nhận. – zic10

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