2013-05-26 3 views
1

Я создал ярлык через раскадровку. Порядок выглядит так: Просмотр -> Просмотр прокрутки -> Букет ярлыков.iOS: CGRectMake не меняет позицию UILabel

Вот вывод текста я хочу добиться: 2 декабря < 30 дней остались>

<> прилагается текст в более мелких буквах госпитализации другого ярлыка пользовательского интерфейса.

С тех пор, как имя месяца является динамическим и меняются изменения ширины, я попытался использовать CGRectMake, чтобы изменить положение закрытого текста <. Но он не работает. Я попытался изменить параметры функции, но метка остается. Он не перемещается из своего начального положения, установленного в раскадровке.

label_days_left.frame = CGRectMake(50, 10, 100, 99); 

EDIT:

- (void) alignDaysLeft{ 
    //code to align the label just after the match date 
    CGFloat dateLabelWidth = [label_date.text sizeWithFont:label_date.font].width; 
    CGFloat dateLabelHeight = [label_date.text sizeWithFont:label_date.font].height; 
    CGFloat someGap = 0; 
    CGFloat daysLeftX = label_date.frame.origin.x + dateLabelWidth + someGap; 
    CGFloat daysLeftY = label_date.frame.origin.y; 
    [label_date sizeToFit]; 
    //label_days_left.frame = CGRectMake(daysLeftX, daysLeftY, 100, dateLabelHeight); 
    label_days_left.frame = CGRectMake(50, 10, 100, 99); 
    label_days_left.text = [NSString stringWithFormat:@"lolo"]; 
    NSLog(@"date width - %f", daysLeftX); 

} 

label_date является переменной, которая содержит месяц и день. label_days_left - это переменная метки, которую я пытаюсь разместить рядом с месяцем.

EDIT 2: Frames

EDIT 3: Я создал новый проект. Перетащил ярлык на вид. Создал розетку. Синтез.

И использовал следующий код, чтобы переместить его -

[labia setFrame:CGRectMake(0, 100, 5, 99)]; 

Это не сработало. Какую ошибку я делаю?

+0

Где вы размещаете этот код? Является ли он внутри метода делегата диспетчера представлений? –

+0

Он находится в файле "appname_timeViewController.m". Я вызываю его в пользовательской функции. –

+0

Пожалуйста, поделитесь с нами еще немного своего кода. Всякий раз, когда вы резко меняете кадр UIView, он меняется. Там должно быть где-то еще, что либо изменяет его обратно на исходные значения, либо вызывает, что label_days_left действительно не подключен к объекту представления. Или что-то другое. –

ответ

8

ли вы AutoLayout включен? Если это так, это может быть вашей проблемой, так как вы не должны беспокоиться о настройке фрейма с помощью AutoLayout и вместо этого устанавливать ограничения.

+0

Вы, сэр, потрясающие! Я ничего не знал об Autolayout. Задача решена! Но перестанет ли это возникать проблема? –

+3

@Pritesh зависит от того, используете ли вы его для поддержки различных размеров экрана и макетов. Вы также можете использовать автоматизацию или сделать это в коде для поддержки разных экранов. Ознакомьтесь с этим учебным пособием (часть 1 и 2) для получения дополнительной информации: http://www.raywenderlich.com/20881/beginning-auto-layout-part-1-of-2 – HM1

+0

@PriteshDesai отключение не должно вызывать никаких проблем если вы на самом деле не использовали его раньше, но вы должны дважды проверить, чтобы быть уверенным. Мне лично легче работать без него, но бывают ситуации, когда это может быть полезно. –

1
NSString *someString = [NSString stringWithFormat:@"%@",label_date.text] 
UIFont *yourFont = [UIFont systemFontOfSize:22.0]; 
CGSize stringBoundingBox = [someString sizeWithFont:yourFont]; 
[label_days_left setFrame:CGRectMake(label_days_left.frame.origin.x, 10, stringBoundingBox.width, 99)]; 
[label_days_left setText:someString]; 

Pls попробовать этот раз ....

+0

Привет, Виджай, я попробовал ваш код, он не работает. Затем я создал новый проект с одним ярлыком, но он не работал. Я изложил все шаги, которые я сделал в редактировании. Пожалуйста, взгляните на это. Это требует только ограничения от раскадровки. Я пропустил какой-то шаг? –

Смежные вопросы