nó không làm việc chỉ vì kích thước phông chữ của văn bản bạn đã khai báo trong UITextField
và CGRectInset
bạn đang áp dụng. Trên thực tế nó phải là theo kích thước font bạn đang thiết lập. Ví dụ: đối với kích thước phông chữ là 14,0, chỉ cần thay đổi phương thức của bạn như sau:
- (CGRect)textRectForBounds:(CGRect)bounds {
return CGRectInset(bounds , 30, 6);
}
-(CGRect) editingRectForBounds:(CGRect)bounds {
return CGRectInset(bounds , 30, 6);
}
Lý do là hình chữ nhật vẽ của văn bản. Ví dụ: khi chúng tôi đặt kích thước phông chữ là UITextField
là 14.0 thì yêu cầu phải có độ cao tối thiểu là 18.0 để điều chỉnh văn bản trong khung. Vì vậy, nó cần thêm 4 pixel xung quanh văn bản, bạn có thể nói nó là khung lớp phủ. Do đó, trong trường hợp của bạn, điều kiện này không thỏa mãn vì tôi đoán bạn đã điều chỉnh kích thước phông chữ thành 14.0 và theo chiều cao khung mặc định là UITextField
là 30.0 và mặt nạ cạnh của bạn là 7.0 mỗi bên có nghĩa là tổng số 14.0 . Vì vậy, rect của bạn cho văn bản trả về 16.0 mà lần lượt chặn hệ điều hành từ việc cập nhật khung văn bản vì nó nằm ngoài ngữ cảnh đồ họa.Tôi hy vọng bạn rõ ràng. Nếu nó giải quyết được vấn đề của bạn thì vui lòng chấp nhận câu trả lời của tôi. Câu trả lời hay hơn sẽ như sau:
- (CGRect)textRectForBounds:(CGRect)bounds {
return CGRectInset(bounds , 30, (30 - self.font.pointSize - 4)/2);
}
-(CGRect) editingRectForBounds:(CGRect)bounds {
return CGRectInset(bounds , 30, (30 - self.font.pointSize - 4)/2);
}
Tận hưởng!
Nguồn
2014-06-27 08:30:52
Bạn đang thực hiện những để tạo ra một hình chữ nhật xung quanh văn bản? Có nhiều cách khác để đạt được điều đó, có lẽ ít lỗi hơn. –
Bạn có chắc chắn bạn không ghi đè điều gì khác không? Bởi vì tôi đã thực hiện một dự án thử nghiệm đơn giản với một văn bản tùy chỉnh, chỉ cần ghi đè bằng 2 phương thức ở trên và văn bản sẽ cuộn theo chiều ngang đến cuối. – florian
Làm việc của nó phù hợp nếu bạn đặt trường văn bản của bạn trực tiếp trong xib, bởi vì adjustsFontSizeToFitWidth tùy chọn đã được thiết lập "CÓ". nhưng nếu bạn phân bổ động của lớp textfield, bạn cần phải đặt textFieldObject.adjustsFontSizeToFitWidth = YES; – Yogendra