2014-01-14 15 views
0

Я пытаюсь изменить размер этикетки в соответствии с текстом в ней (или максимальной шириной, которую я разрешаю ie108), и поместите кнопку рядом с ней, код ниже действительно дает удовлетворительные результаты при отладке, но ширина метки не является соответственно. Есть ли какие-либо специальные настройки в xib или что-то еще , пожалуйста, помогите Iam.Динамическое изменение размера UILabel, но его не работает.

 NSDictionary *[email protected]{NSFontAttributeName:locFeedcell.lbl_location.font}; 
     CGFloat width=[locFeedcell.lbl_location.text sizeWithAttributes:attrib].width; 
     CGRect newLabelframe=locFeedcell.lbl_location.frame; 
     CGRect newButtonFrame=locFeedcell.btn_map.frame; 
     if (width>=108.00f) { 
      newLabelframe.size.width=108.00; 
     } else { 
      newLabelframe.size.width=width; 
      newButtonFrame.origin.x=locFeedcell.lbl_location.bounds.origin.x+width+4.00; 
     } 
     locFeedcell.lbl_location.frame=newLabelframe; 
     locFeedcell.btn_map.frame=newButtonFrame; 

вот моментальный снимок файла xib.

here is snapshot of xib file.

ответ

1

Обновление: Вместо использования locFeedcell.lbl_location.bounds.origin.x+widthlocFeedcell.lbl_location.frame.origin.x+width. bounds.origin.x всегда 0.

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

Быстрый совет: Вы можете использовать CGRectGetMaxX(locFeedcell.lbl_location.frame) вместо locFeedcell.lbl_location.bounds.origin.x+width, чтобы получить правый край от рамки.

+0

Да, автомат был включен, не знал об этом. Thanx это была огромная помощь. И спасибо за подсказку тоже. –

-1

попробуйте следующее;

[locFeedcell.lbl_location setFrame:newLabelframe]; 
    [locFeedcell.btn_map setFrame:newButtonFrame]; 
+0

thats, эквивалентный 'locFeedcell.lbl_location.frame = newLabelframe; locFeedcell.btn_map.frame = newButtonFrame;' – Tobi

0

В коде отсутствует логическая проблема. Есть две вещи, которые вы можете проверить:

  1. Измените максимальную ширину на два или более ширины, чтобы сделать изменение заметным, поэтому его легче проверить;
  2. Убедитесь, что вы находитесь в потоке пользовательского интерфейса, когда вы устанавливаете новый кадр для элементов интерфейса.
+0

, он на самом деле проверен мной, так как я говорю, что я проверил его через точки отладки. –

0

А как насчет ограничений Autolayout?

https://developer.apple.com/library/ios/documentation/userexperience/conceptual/AutolayoutPG/Introduction/Introduction.html

У вас есть 3 объекта:

  1. был недавно в -> Давайте назовем это lbl_recentlyAt
  2. lbl_location
  3. btn_map

Вам потребуется 3 ограничения:

  1. Установите положение починки вашей недавно добавить этикетки:

| Х- [lbl_recentlyAt]

  1. Установите переменное положение метки местоположения и кнопки, давайте говорят с 20p пространства

[lbl_recentlyAt] -20- [lbl_loc ция] -20- [btn_map]

Вам может понадобиться вызвать метод setNeedsLayout вашей ячейки при изменении ширины lbl_location обновить расположение: https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/uiview/uiview.html#//apple_ref/occ/instm/UIView/setNeedsLayout

[cellView setNeedsLayout] 

Надеется, что это помогает!

+0

авто макет действительно помогает, но я пытался сделать это простым способом ... использование автолайот - сложная вещь для меня ... но thnkyou ** @ adepablor ** за долю знаний. Это может помочь мне где-то в будущем. –

+0

Добро пожаловать, используйте любой подход, который вам кажется более легким для вас. Но мое предложение - сейчас или в обозримом будущем - внимательно прочитать ссылку автозапуска, которую я опубликовал. Это займет у вас не более часа, и вы увидите, что это не так сложно! Кроме того, вы можете добавить ограничения в раскадровки, что означает меньше кода, что означает меньше ошибок, это здорово! :) – adepablor

0

// использовать это для самодельного шрифта

CGFloat ширина = [label.text sizeWithFont: [UIFont fontWithName: @ "ChaparralPro-Смелого" размер:] 40]. Ширина;

// использовать это для системного шрифта

CGFloat ширина = [label.text sizeWithFont: [UIFont systemFontOfSize: 40]]. Ширина;

ярлык.frame = CGRectMake (точка.x, точка.y, ширина, высота);

//point.x, point.y -> origin для метки;

// высота -> высота вашей метки;

+0

размер с шрифтом устарел сэр и что у меня есть то же самое .. –

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

  • Нет связанных вопросов^_^