#ios #objective-c #uilabel #autoresize
#iOS #objective-c #uilabel #авторазмер
Вопрос:
Я хотел бы реализовать ULLabelExtended для автоматического изменения размера текста UILabel в соответствии с шириной устройства. но когда дело доходит до выполнения; он показывает изображение в качестве результата вместо отображения полного предложения:
Полное предложение: Ze aangeplant cocos rond hun nieuwe home.
Существуют ли какие-либо другие альтернативы для получения связи или функций, чтобы размер текста метки был пропорционален ширине устройства?
Ниже приведен мой код
Приложение:
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;
[self.labelLong setWidthOfLabelWithMaxWidth:screenWidth];
[self.labelShort setWidthOfLabelWithMaxWidth:screenWidth];
Источник:
#import "UILabelExtended.h"
@implementation UILabelExtended
@synthesize selector,customDelegate, objectInfo;
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
if(self.selector)
if([self.customDelegate respondsToSelector:self.selector]) {
[self.customDelegate performSelector:self.selector withObject:self];
return;
}
}
- (void)dealloc {
self.customDelegate = nil;
self.selector = NULL;
self.objectInfo = nil;
}
@end
@implementation UILabel(UILabelCategory)
- (void)setHeightOfLabel {
UILabel* label = self;
//get the height of label content
CGFloat height = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.bounds.size.width, 99999) lineBreakMode:NSLineBreakByWordWrapping].height;
//set the frame according to calculated height
CGRect frame = label.frame;
if([label.text length] > 0) {
frame.size.height = height;
}
else {
frame.size.height = 0;
}
label.frame = frame;
}
- (void)setWidthOfLabel {
UILabel* label = self;
//get the height of label content
CGFloat width = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(99999, label.bounds.size.height) lineBreakMode:NSLineBreakByWordWrapping].width;
//set the frame according to calculated height
CGRect frame = label.frame;
if([label.text length] > 0) {
frame.size.width = width 5;
}
else {
frame.size.width = 0;
}
label.frame = frame;
}
- (void)setHeightOfLabelWithMaxHeight:(float)maxHeight {
UILabel* label = self;
//get the height of label content
CGFloat height = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.bounds.size.width, maxHeight) lineBreakMode:NSLineBreakByWordWrapping].height;
//set the frame according to calculated height
CGRect frame = label.frame;
if([label.text length] > 0) {
if (height > maxHeight) {
frame.size.height = maxHeight;
}
else {
frame.size.height = height;
}
}
else {
frame.size.height = 0;
}
label.frame = frame;
}
- (void)setWidthOfLabelWithMaxWidth:(float)maxWidth {
UILabel* label = self;
//get the height of label content
CGFloat width = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(99999, label.bounds.size.height) lineBreakMode:NSLineBreakByWordWrapping].width;
//set the frame according to calculated height
CGRect frame = label.frame;
if([label.text length] > 0) {
if (width > maxWidth) {
frame.size.width = maxWidth;
}
else {
frame.size.width = width;
}
}
else {
frame.size.width = 0;
}
label.frame = frame;
}
@end
Комментарии:
1. Вы пробовали
Autoshrink
использовать собственностьAttribute inspector
?2. Я не уверен, что полностью понимаю, о чем вы спрашиваете, как насчет метода sizeToFit в UIView?
3. Я использовал размер по размеру, но метка не может отображать весь текст в одной строке
4. Вы пробовали это, установив для свойства numberOfLines значение Ноль .. ?
5. На самом деле мне нужна только одна строка для отображения. Из-за спецификации дизайна учитывается только изменение размера шрифта