2012-02-03 26 views
5

Tôi biết có rất nhiều chủ đề tương tự như thế này, nhưng tôi đã đọc tất cả chúng (theo như tôi có thể nói) và chưa thấy cùng một vấn đề tôi đang gặp phải.Văn bản bắt buộc phải vừa với UILabel theo chiều dọc?

Tôi đang cố gắng hiển thị tất cả văn bản trong nhãn VERTICALLY.

Hãy để tôi giải thích - Phông chữ không phải lúc nào cũng được tạo theo cùng một cách, do đó, trong khi tổng chiều cao của chúng có thể giống nhau (ví dụ: 24pts). Tuy nhiên, Ascender và Descender rất khác nhau - một phông chữ có thể chủ yếu nằm trên đường cơ sở, trong khi một phông chữ khác chủ yếu là dưới đây. Do đó, cùng một văn bản, với các phông chữ khác nhau có thể không luôn hiển thị trong cùng một chế độ xem/nhãn.

Ví dụ: xem ảnh chụp màn hình bên dưới.

Đầu tiên là Helvetica-Bold 300pts. Thứ hai là Apple Gothic 300pts.

Lưu ý cách đáy "g" bị cắt đứt với Helvetica (và nhiều phông chữ khác nữa - hãy thử nó, bạn sẽ thấy).

Helvetica-Bold300

AppleGothic

Vì vậy, vấn đề của tôi là thế này: Tôi muốn để có thể xem toàn bộ văn bản, không phụ thuộc vào phông chữ. Nếu văn bản trong ví dụ "Helvetica" có thể được di chuyển lên (và căn giữa) trong nhãn, nó sẽ giải quyết được vấn đề của tôi. Để dễ dàng hơn, tôi chỉ cần hiển thị một dòng.

Thật không may, không có giải pháp nào tôi nhìn thấy liên quan đến hậu duệ và chữ cái của phông chữ và tìm cách vẽ văn bản trong một Rect và không cắt nó. Lưu ý rằng các giải pháp "VerticalAlignment" trong các chủ đề khác nhau không khắc phục vấn đề cụ thể này.

Có ai có bất kỳ ý tưởng hoặc giải pháp nào cho điều này không?

Trả lời

2

Cách đơn giản nhất là phân lớp UILabel và sử dụng phương thức - (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode của NSString có trong NSString UIKit additions.

Bạn có thể ghi đè lên - (void)setFont trong sublcass của mình, kiểm tra xem kích thước phông chữ có hoạt động ở chế độ xem trực tiếp hay không và nếu nó quá lớn, làm cho nó nhỏ hơn cho đến khi nó khớp.

+0

Cảm ơn, nhưng những hình ảnh tôi đã đăng đã là kết quả của phân lớp bằng cách sử dụng VerticalAlignment và 'sizetofit'. Kích thước phông chữ không phải là vấn đề - như bạn thấy, có rất nhiều chỗ cho văn bản - nó không được căn chỉnh chính xác. – wayneh

+0

Ok, nhưng nhìn vào phương thức sizeWithFont sẽ cho bạn chiều cao của chuỗi, và nếu bạn biết điều đó, bạn có thể căn giữa nó và sau đó vẽ chuỗi với drawStringAtPoint. Chỉ cần đọc qua liên kết - nó cung cấp cho bạn mọi thứ bạn cần để thực hiện việc này. – sosborn

+0

OK, tôi sẽ kiểm tra và xem tôi có thể làm gì. – wayneh

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