iPhone UITableViewCell: изменение положения текста. - PullRequest
37 голосов
/ 06 июня 2010

Я новичок в разработке для iPhone, и сейчас я работаю над простым приложением для чтения RSS. У меня проблема в том, что мне нужно изменить положение textLabel внутри UITableViewCells. Я пробовал setFrame или setCenter, но это ничего не делает. Кто-нибудь знает, что мне нужно делать внутри метода tableView:cellForRowAtIndexPath:, чтобы изменить положение textLabel в верхней части ячейки (x = 0, y = 0)?

Спасибо

PS: на UITableViewCell ссылается переменная с именем cell. Я пытался [cell setFrame:CGRectMake(0, 0, 320, 20)] безуспешно.

Ответы [ 5 ]

99 голосов
/ 20 августа 2010

Вы можете создать подкласс для UITableViewCell и настроить рамку de textLabel. Смотрите ответ: Выравнивание меток в UITableViewCell . Это прекрасно работает для меня.

Это мой подкласс

#import "UITableViewCellFixed.h"
@implementation UITableViewCellFixed
- (void) layoutSubviews {
     [super layoutSubviews];
     self.textLabel.frame = CGRectMake(0, 0, 320, 20);
}
@end

Это мой UITableViewControllerClass:

UITableViewCellFixed *cell = (UITableViewCellFixed *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCellFixed alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
21 голосов
/ 06 ноября 2013

Вы можете попробовать indentationLevel , separatorInset и другие свойства отступов содержимого объекта UITableViewCell.

10 голосов
/ 06 июня 2010

Кажется, я решил свою проблему. Вот некоторый код, на случай, если кто-то столкнется с той же проблемой:

UILabel *ttitle = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 20)] autorelease];
ttitle.font = [UIFont boldSystemFontOfSize:13];
ttitle.textColor    = [UIColor blackColor];
ttitle.textAlignment = UITextAlignmentLeft;

[ttitle setText:[[stories objectAtIndex: storyIndex] objectForKey: @"title"]];

[cell.contentView addSubview:ttitle];

Идея состоит в том, чтобы создать собственный объект метки, потому что textLabel автоматически позиционируется и не может перемещаться.

Приветствие.

9 голосов
/ 02 октября 2012

Причина, по которой исходный код автора не работает, заключается в том, что кажется, что рамка textLabel установлена ​​после того, как UITableViewCell был возвращен из вашего метода делегата.

Я заметил, что могу успешно изменить многие свойства textLabel, такие как выравнивание текста, цвет, шрифт и т. Д., Но изменение фрейма не имеет никакого эффекта, и когда я печатаю фрейм в отладчике позже (как при выборе) , кадр не то, что я установил. Поэтому я делаю вывод, что инфраструктура UIKit изменяет фрейм textLabel после того, как он возвращается из метода делегата. Без сомнения, это, вероятно, сделано, потому что инженеры Apple хотели убедиться, что ваш текст был нарисован на экране, поэтому они измеряют его и изменяют кадр так, чтобы он подходил. Вероятно, они полагали, что такие люди, как мы, которые хотели бы изменить положение текста, могли бы сделать это путем создания подклассов или просто добавив другую UILabel (или что-то еще) в качестве подпредставления. Начинающему разработчику может быть очень трудно, если его текст не отображается на ярлыке или был усечен из-за того, что он не настроил рамку.

В моем случае я хотел, чтобы текст располагался по центру по горизонтали, был определенного цвета / шрифта / размера и немного выше по вертикали в ячейке. Будучи слишком ленивым, чтобы создать подкласс, я сначала попытался изменить кадр. Когда это не сработало, я попытался найти ответ (нашел этот пост).

Мое окончательное решение состояло в том, чтобы установить для свойства numberOfLines значение 0 и добавить некоторые возвраты каретки к моему тексту. Теперь ЭТО лениво.

0 голосов
/ 24 октября 2017

В Swift 3 это будет

override func layoutSubviews() {
    super.layoutSubviews()
    self.textLabel?.frame.origin.x = 50
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...