Khoảng trống ở đầu UITextView trong iOS 10


116

Tôi có UITextView với một số văn bản trong đó. Mọi thứ đều tốt với iOS 6 nhưng bây giờ với iOS 7, nó để lại khoảng trống trên đầu và sau đó đặt văn bản bên dưới giữa chế độ xem văn bản.nhập mô tả hình ảnh ở đây

Tôi đã không đặt bất kỳ contentOffSet nào. Xin vui lòng giúp đỡ!

Câu trả lời:


217

Dạng xem văn bản là dạng xem cuộn. Bộ điều khiển chế độ xem sẽ tự động thêm độ lệch nội dung vào các chế độ xem cuộn, vì giả sử chúng sẽ muốn cuộn lên phía sau thanh điều hướng và thanh trạng thái.

Để ngăn chặn điều này, hãy đặt thuộc tính sau trên bộ điều khiển chế độ xem chứa chế độ xem văn bản:

self.automaticallyAdjustsScrollViewInsets = NO

7
Đây là một câu trả lời tốt hơn vì nó không chỉ đề cập đến cách khắc phục vấn đề mà còn là lý do tại sao nó xảy ra ngay từ đầu.
Stephen Melvin,

1
BTW, bạn không cần phải phân lớp và ghi đè. Chỉ cần đặt tự độngAdjustsScrollViewInsets thành KHÔNG sau khi bạn khởi tạo UITextView.
leftspin

1
@leftspin là một trường hợp khá hiếm khi bạn chưa phân loại bộ điều khiển chế độ xem. Và việc ghi đè phương thức có nghĩa là mã của bạn sẽ vẫn hoạt động trên các phiên bản iOS thấp hơn - việc đặt thuộc tính có nghĩa là trước tiên bạn cần kiểm tra tính tương thích.
jrturton

1
Vì vậy, nếu Bộ điều khiển Chế độ xem Mô hình của tôi nằm ngoài UINavigationController thì phần bù sẽ bị xóa? Thật là điên rồ ... Hành vi này CHỈ đúng khi chế độ xem văn bản của tôi được căn chỉnh lên trên cùng, nếu không thì nó là rác rưởi ... Ai đó có thể giải thích tại sao Apple lại làm điều gì đó như vậy không?
Paul Brewczynski

@jrturton xin lỗi vì đây là một bài đăng cũ hơn và xin thứ lỗi vì tôi là người mới làm quen với obj-c nhưng đây hiện là tài sản của UIViewController ... nó đã từng là một phương thức?
Craig

58

Câu trả lời hiện tại mà IronManGill đưa ra không phải là một giải pháp tốt, bởi vì nó không dựa trên sự hiểu biết về lý do tại sao vấn đề xảy ra ngay từ đầu.

Câu trả lời của jrturton cũng không phải là cách giải quyết rõ ràng nhất. Bạn không cần phải ghi đè. Hãy giữ nó đơn giản!

Tất cả những gì bạn cần là thiết lập những điều sau:

self.automaticallyAdjustsScrollViewInsets = NO;

trong phương thức viewDidLoad.

Kiểm tra tài liệu: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621372-automaticallyadjustsscrollviewin


1
Thay đổi bảng phân cảnh đôi khi có thể tốt hơn. Đi tới "Trình kiểm tra danh tính" -> "Thuộc tính thời gian chạy do người dùng xác định" và thêm định nghĩa vào đó.
hufeng03

automaticallyAdjustsScrollViewInsets không được dùng nữa. Từ iOS11, hãy sử dụngcontentInsetAdjustmentBehavior
Cœur

47

Trong Trình tạo giao diện,

  • Chọn bộ điều khiển chế độ xem có chứa UITextView.
  • Đi tới trình kiểm tra thuộc tính.
  • Bỏ chọn "Điều chỉnh Insets Chế độ xem Cuộn".

Đây là giải pháp dễ dàng nhất cho trường hợp của tôi trong ios8
platinor

3
Lưu ý: Đó là một thuộc tính của UIViewController. Không thể tìm thấy nó và sau đó nhận ra rằng tôi đã không đọc văn bản hoàn toàn
Maik639

37

Điều này đã làm việc cho tôi

textView.textContainerInset = UIEdgeInsetsZero;  
textView.textContainer.lineFragmentPadding = 0;

24

Đi tới Interface Builder:

  1. Chọn view controllercó chứatext view
  2. bỏ chọn Adjusts Scroll View Insetstài sản

nhập mô tả hình ảnh ở đây


đây là những gì tôi đang tìm kiếm. bạn cũng có thể làm điều này bằng cách thêm 'self.automaticallyAdjustsScrollViewInsets = false' để viewController
CodeOverRide

Đây là một câu trả lời hay và đơn giản, chỉ xảy ra để kết thúc tìm kiếm của tôi về "tại sao văn bản này không hiển thị".
UpSampler 14/02/17

10

Tôi thực sự tự hỏi liệu đây có phải là một tính năng thực sự hay không… Bản ghi tự động 64 điểm này chỉ được thêm vào khi UIScrollViewhoặcUITextView như độ sâu lớn hơn của tất cả các subviews của view controller quan điểm của. Ví dụ: nếu bạn thêm chế độ xem phía sau (ở đây tôi đang nói về z-buffer, không phải chế độ xem ảnh ghép) chế độ xem cuộn, phần chèn 64 điểm này sẽ không được thêm tự động.

Ví dụ: cái này thêm nội dung:

nhập mô tả hình ảnh ở đây

Trong trường hợp này, nội dung không được thêm vào:

nhập mô tả hình ảnh ở đây

Điều này thực sự có vẻ lạ đối với tôi… Tại sao hệ điều hành lại xem xét độ sâu của chế độ xem để quyết định xem nó có nên mở rộng tầm nhìn hay không?



6

Bạn có thể xóa khoảng trống trên đầu trang UITextViewbằng cách thêm:

yourTextView.textContainerInset = UIEdgeInsetsZero;

5

Tôi đã giải quyết vấn đề này bằng cách đặt độ lệch nội dung thành giá trị âm. Đây là mã Swift.

yourTextView.setContentOffset(CGPoint(x: 0, y: -150), animated: true)

Đây là giải pháp tốt nhất để giữ các tấm lót và cuộn dưới thanh mờ một cách chính xác. Tôi sẽ đề nghị sửa đổi này. [self.textView setContentOffset:CGPointMake(0.f, -self.topLayoutGuide.length) animated:NO];
InitJason

1
Không có gì làm việc cho tôi ngoại trừ điều này. Swift, Xcode 9.1.
Ashok

1

Những gì bạn phải hiểu là điều này liên quan đến thanh điều hướng:

  • Nếu nội dung của bạn nằm dưới thanh điều hướng, bạn muốn bộ điều khiển chế độ xem tự động điều chỉnh nội dung chế độ xem cuộn (mặc định).
  • Nếu nội dung của bạn không nằm dưới thanh điều hướng (có thể bạn đã sử dụng hướng dẫn bố cục trên cùng cho giới hạn không gian trên cùng), bạn có thể tắt điều chỉnh cài đặt chế độ xem cuộn tự động như đã đề cập trong hầu hết các câu trả lời khác.

1

Tôi đã thử thủ thuật sau đây, nó hoạt động.

- (void)viewDidLoad{
   self.textView.scrollEnabled = NO;  
}       
- (void)viewDidAppear:(BOOL)animated {
   [super viewDidAppear:animated];
   self.textView.scrollEnabled = YES;
}


0

Đây là một giải pháp không chuyên nghiệp, tôi chắc chắn ... Nhưng chỉ cần đặt một nhãn trống phía sau chế độ xem văn bản là giải quyết được vấn đề.


1
đây không phải là một giải pháp =)
Ilker Baltaci

0

Điều này chỉ phù hợp với tôi (có sẵn từ iOS 7)

[<#your UITextViewInstance#> setTextContainerInset:UIEdgeInsetsZero];
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.