2013-08-31 37 views
14

Khi UITextField của tôi trở thành đáp ứng đầu tiên (khi chỉnh sửa), văn bản sẽ di chuyển xuống rất thấp và khoảng cách giữa các ký tự được tăng lên rất ít. Khi từ chức trả lời đầu tiên (bàn phím biến mất), các ký tự sẽ chuyển về vị trí ban đầu. Lúc đầu, tôi nghĩ rằng đây là một vấn đề phông chữ, như tôi đang sử dụng một phông chữ tùy chỉnh, nhưng điều tương tự xảy ra khi tôi sử dụng phông chữ hệ thống hoặc phông chữ tùy chỉnh khác.Văn bản UITextfield đang di chuyển khi chỉnh sửa

Vui lòng kiểm tra hình ảnh bên dưới. Đầu tiên là với bàn phím xuống và thứ hai là với bàn phím lên. Có thể khó nhìn thấy, vì phương sai nhỏ, nhưng trạng thái bàn phím lên cho thấy các ký tự di chuyển xuống và hơi khác nhau.

enter image description here

enter image description here

+2

Bạn có thể hiển thị mã hơn? Thuộc tính nào được đặt cho nó? Nó được thêm vào khung nhìn như thế nào? – AdamG

+0

Tôi đang thêm nó vào chế độ xem qua tệp nib và tôi không làm bất kỳ điều gì với chương trình đó. Tôi có một phông chữ tùy chỉnh, căn giữa, không viền, không có nút rõ ràng, điều chỉnh để vừa vặn và mọi thứ khác chỉ là cài đặt mặc định. –

+0

Bạn có tìm thấy giải pháp cho điều này không? – AdamG

Trả lời

0

Bạn đã có thể có kích thước UITextField của bạn phải hơi quá nhỏ chiều cao-khôn ngoan. Hãy thử đổi kích thước theo cách thủ công để có pixel cao hơn hoặc bằng hai pixel. Hoặc chọn nó trong trình soạn thảo XIB và sử dụng "Kích thước để phù hợp với nội dung" trong trình đơn Editor. Điều đó nên đặt trường văn bản thành kích thước phù hợp để chuyển văn bản này không xảy ra.

+0

Tôi đã thử thay đổi kích thước của UITextField và "Kích thước để phù hợp với nội dung", không có may mắn. –

2

Chọn thuộc tính "điều chỉnh cho phù hợp" đặt thuộc tính điều chỉnhFontSizeToWidth trong UITextField.

đó có bất động sản này (UITextField Apple Documentation):

Thông thường, nội dung của trường text được vẽ với phông chữ bạn chỉ định trong thuộc tính phông chữ. Nếu thuộc tính này được đặt thành CÓ, tuy nhiên, và nội dung trong thuộc tính văn bản vượt quá hình chữ nhật của trường văn bản, người nhận bắt đầu giảm kích thước phông chữ cho đến khi chuỗi vừa với kích thước phông chữ tối thiểu. Văn bản được thu hẹp dọc theo đường cơ sở .

Giá trị mặc định cho thuộc tính này là NO. Nếu bạn thay đổi thành YES, , bạn cũng nên đặt kích thước phông chữ tối thiểu thích hợp bằng cách sửa đổi thuộc tính minimum1ontSize .

Trước tiên, tôi sẽ bỏ chọn tùy chọn này và xem điều đó có dừng hay không và sau đó làm theo lời khuyên về tài liệu và đặt thuộc tính minimumFontSize thấp hơn, điều này cũng có thể gây ra sự cố.

Sự cố này có thể là kết quả của sự xuất hiện của con trỏ "đang chỉnh sửa" màu xanh dương. Đường cơ sở của văn bản (reference) là phần cuối của văn bản. Văn bản của bạn đang co lại "dọc theo đường cơ sở" bằng cách ấn xuống, nó nghiêng mạnh hơn theo hướng của nó là vấn đề minimumFontSize/adjustsFontSizeToWidth.

+0

Cảm ơn bạn đã phản hồi. Không đặt thuộc tính adjustsFontSizeToWidth thành NO (bỏ chọn nó) hoặc sửa đổi kích thước phông chữ tối thiểu đã khắc phục sự cố. –

+0

Khi bạn đặt kích thước tối thiểu, bạn đã làm cho nó có cùng kích thước với phông chữ của bạn? – AdamG

+0

Tôi chỉ cố gắng mà không có kết quả. Tôi tìm thấy bài đăng này giúp với vị trí nằm ngang, nhưng khoảng cách văn bản vẫn thay đổi. http://stackoverflow.com/questions/6351340/using-a-custom-font-in-a-uitextfield-causes-it-to-shift-slightly-when-accessed –

0

Bạn nên đặt Thuộc tính phông chữ sớm hơn Thuộc tính văn bản.

+0

Điều này không ảnh hưởng đến vấn đề này. –

1

Nếu bạn đang mạnh mẽ làm UITextField trả lời đầu tiên, làm điều đó trong viewDidAppear: thay vì viewDidLoad ... Đây đã giải quyết được vấn đề đối với tôi ...

+0

Đây là chính xác những gì cố định nó và nên được đánh dấu là câu trả lời. –

2

Trong xib, borderStyle thiết textfield để bất kỳ giá trị hơn TextBorderStyleNone. Và trong mã, thiết lập borderStyle của textfield là TextBorderStyleNone một cách rõ ràng.

Tôi không thể tìm ra lý do tại sao nhưng có vẻ như lỗi trình khởi tạo. Nó hoạt động tốt trong mã khác mà không khởi tạo UITextField bởi cửa hàng từ xib.

Khi đặt borderStyle của TextFtyle là TextBorderStyleNone tại xib, vấn đề vẫn còn ngay cả khi đặt borderStyle là TextBorderStyleNone trong mã. Nó có thể được theo sau bởi một số công cụ 'layoutIfNeeded', được kích hoạt bởi sự thay đổi giá trị.

2

Kiểm tra OFF "Clip to Bounds" của textField trong bảng phân cảnh của tôi hoạt động tốt cho tôi.

+0

Điều này đã giúp tôi. Như đã lưu ý trong phần bình luận ở trên, tôi nhận thấy điều này đang xảy ra kể từ iOS 10.0 (nhưng không phải 9.3.x) khi sử dụng kiểu đường viền vô hình. Kiểu đường viền mặc định không có vấn đề. – Jonny

1

Thiết lập Min Font Size tài sản tương đương với kích thước phông chữ trong Interface Builder làm việc cho tôi