2012-01-07 14 views
5

Tôi có một lớp con của UILabel, được cho là sẽ cập nhật văn bản của nó khi người dùng gõ một cái gì đó. Đương nhiên, khi độ dài của văn bản tăng lên, kích thước của nhãn phải điều chỉnh để phù hợp với văn bản. Tôi đã gọi phương thức sizeToFit và trong khi nhãn điều chỉnh độ rộng của nó một cách chính xác, phần cuối của văn bản bị cắt. Vấn đề là văn bản bao gồm các bảng con và các chữ viết tay, và nhãn không tự điều chỉnh với các bảng con đang xem xét (ví dụ, với H₂O, phần dưới cùng của hai chữ này được cắt bỏ).Phương thức gọi kích thướcToFit trên UILabel có các bảng con không hoạt động

Tôi có thể ghi đè kích thướcToFit hoặc sizeThatFits: để tăng chiều cao của nhãn không?

EDIT:

- (void) addCompound { 

self.currentLabel = [[FormulaLabel alloc] initWithFrame:CGRectMake(10, 10, 100, 50)]; 

[self addSubview:self.currentLabel]; 

[self.currentLabel sizeToFit]; 

// Right now self.currentlabel.text = "". However, I've confirmed thru NSLogging that letters are added to self.currentLabel.text as the user types on the keyboard. Also, the text displays properly (as long as it's within the original frame) when I remove [sel.currentLabel sizeToFit] 

} 
+0

viết lại sizeToFit và sau [siêu sizeToFit]; thay đổi chiều cao – SAKrisT

+0

@SAKrisT '- (void) sizeToFit { [super sizeToFit]; self.frame = CGRectMake (self.frame.origin.x, self.frame.origin.y, self.frame.size.width, 100); } ' – Mahir

+1

@SAKrisT Tôi đã thử nhưng chế độ xem không xuất hiện – Mahir

Trả lời

2

Bạn nên ghi đè lên các phương pháp UILabel (CGSize) sizeThatFits: kích thước (CGSize) trong lớp con của bạn như ví dụ dưới đây. Tôi chỉ thêm 10pt vào chiều cao được tính toán bởi UILabel để chứa các chỉ số.

@implementation ESKLabel 
- (CGSize)sizeThatFits:(CGSize)size 
{ 
    CGSize theSize = [super sizeThatFits:size]; 
    return CGSizeMake(theSize.width, theSize.height + 10); 
} 
@end 

Mẫu đầu ra:

self.eskLabel.text = @"Hello Long² Long\u2082 World"; 
NSLog(@"CGSize: %@", NSStringFromCGSize(self.eskLabel.frame.size)); 
[self.eskLabel sizeToFit]; 
NSLog(@"CGSize: %@", NSStringFromCGSize(self.eskLabel.frame.size)); 

Từ NSLog:

This GDB was configured as "x86_64-apple-darwin".sharedlibrary apply-load-rules all Attaching to process 864. 
2012-01-06 23:34:21.949 Stackoverflow4[864:f803] CGSize: {85, 61} 
2012-01-06 23:34:21.951 Stackoverflow4[864:f803] CGSize: {302, 44} 
kill 
quit 
-1

này nên để lừa:

self.eskLabel.adjustsFontSizeToFitWidth = YES; 
Các vấn đề liên quan