Моя пользовательская ячейка и дизайн storyboard
находятся в iPhone8
, а ширина Label
- 355, но когда я запускаю проект в iPhone5
, я хочу ширину 300 в соответствии с iPhone5, но когда я NSLog
ширина метки, я все равно получаю 355.
Как я могу получить Label
шириной 300 в iPhone5
?
Ребята подскажите пожалуйста, как можно получить ширину Label
в зависимости от устройства
вот моя ссылка на код
https://drive.google.com/open?id=1Z2bHhKS_s6P6uICqssaW0gNTDGM-p9vL
Пожалуйста, помоги мне
вы используете ячейку с фактически возвращаемым размером ячейки из xib.
Также вы можете попробовать зарегистрировать ячейку в viewDidLoad, если вы зарегистрируете ее для tableView, а затем повторно используете в cellForRowAtIndex, вы получите желаемое поведение.
@AbuUlHassan, как я могу это сделать, пожалуйста, уточнить. я думаю, ты понимаешь мою настоящую проблему
проверьте мой ответ ниже и внесите свои поправки. :)
Вы можете получить фактическую ширину ячейки в делегате TableView делегата CellWillAppear.
вы занимаетесь методом делегата willDisplayCell? если да, я не могу использовать, потому что вызов willDisplayCell после cellForRowAtIndexPath.
@AnkurPatel - объясните Зачем, который вам нужен. Очень возможно, что вы задаете неправильный вопрос.
@DonMag Мне нужна ширина UILabel, потому что я хочу рассчитать размер данных. Чтобы рассчитать размер данных, мне нужно передать шрифт, размер UILabel для расчета размера данных. Когда я использую размер UILabel для расчета данных, я получаю размер UILabel в соответствии с iPhone8 в iPhone5. На самом деле мне нужен размер UILabel в соответствии с устройством, чтобы получить идеальный размер данных
@AnkurPatel - хммм ... во-первых, ячейка и рамка метки недоступны, пока механизм компоновки не отрендерит их - чего не происходит на cellForRowAt
или prepareForReuse
, поэтому вам нужно пересмотреть свой подход. Кроме того, что вы собираетесь делать, когда пользователь поворачивает устройство? Или использует сплит-просмотр? Можно ли использовать автоматическое масштабирование шрифта? Или просто обрезать или обрезать текст? Или использовать многострочные метки?
я просто обрезаю или обрезаю текст и использую многострочные метки
на самом деле весь мой код ячейки является динамическим, что означает, что какая-то ячейка имеет высоту 100, ячейка имеет высоту 200 и так далее.
после расчета моих данных я должен переместиться ниже части UIlabel.
@AnkurPatel - в общем, вам намного лучше использовать автоматическую компоновку и ограничения для обработки динамического изменения размера ваших ячеек. Ничто из того, что вы здесь сказали, не описывает то, что вы пытаетесь сделать. Это почти похоже на курицу или яйцо ... Вам нужен размер, прежде чем вы решите, что показывать, но решение, каким должно быть должен, должно быть тем, что определяет размер.
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView registerNib:[UINib nibWithNibName:@"CustomCell_iPhone"
bundle:[NSBundle mainBundle]]
forCellReuseIdentifier:@"CustomCell"];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"CustomCell";
CustomCell_iPhone *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
return cell;
}
Сбой моего приложения и указание причины ошибки ниже: 'недопустимый наконечник зарегистрирован для идентификатора (CustomCell) - наконечник должен содержать ровно один объект верхнего уровня, который должен быть экземпляром UITableViewCell'
достал вам перо и проверьте, установлен ли в инспекторе атрибутов CustomCell в поле reuseIdentifier.
где я могу получить reuseIdentifier? Извините, я не понимаю
@AnkurPatel Я объяснил причину сбоя в своем ответе
после выбора пера вы увидите иерархию представлений на левой панели, щелкните на своем uitableViewCell, затем вы получите его на правой панели.
Я уже установил идентификатор CustomCell, вы говорите об идентификаторе?
именно ... я говорю об этом.
Я сделал необходимый шаг. Я уже установил идентификатор как CustomCell. все еще я получаю сбой
Не нужно указывать идентификатор в xib, если вы зарегистрируете его, используйте тот же идентификатор
хорошо, я понял, тогда используйте имя пера вместо CustomCell_iPhone, пожалуйста. [self.tableView registerNib: [UINib nibWithNibName: @ Пакет CustomCell_iPhone: [NSBundle mainBundle]] forCellReuseIdentifier: @ "CustomCell"];
Печать кадра ячейки / подвидов в cellForRowAt
дает неверные значения, поскольку ячейка еще не заложена, ваши ячейки отображаются правильно, но вы должны зарегистрировать ячейку вместо этой строки
cell = [[[NSBundle mainBundle] loadNibNamed:@"CustomCell_iPhone" owner:self options:nil] objectAtIndex:0];
Я вижу ниже правильную строку, и вы ее прокомментировали, если вы хотите показать правильные фреймы, распечатайте их внутри метода layoutSubviews
пользовательского класса ячеек, также xib должен содержать только одну корневую ячейку, поэтому вам нужно удалить одну из этих ячеек, если вы хотите использовать оба для tableView, а затем создать отдельный xib для каждого
//
-(void) layoutSubviews {
[super layoutSubviews];
// NSLog here
}
//
Поскольку у вас tableView занимает всю ширину экрана, и вы устанавливаете поле ячейки равным 10 с обеих сторон, вы можете использовать это, чтобы получить ширину lbl внутри cellForRowAt
CGFloat wid = [[UIScreen mainScreen] bounds].size.width - 20
да, вы можете удалить вторую ячейку. Я использую layoutSubviews в CustomCell.m, но не могу получить фрейм в зависимости от устройства.
Нет, он дает правильное значение, в вашем файле его тоже нет
Могу ли я написать layoutSubviews в файле CustomCell.M? Мой UItableView в UIViewControler
внутри CustomCell.M
- (недействительно) layoutSubviews {[super layoutSubviews]; NSLog (@ "lblTemp frame3:% @", NSStringFromCGRect (self.lblTemp.frame)); } внутри Customcell 2018-08-10 18: 51: 14.895155 + 0530 demoCell [11042: 6883850] lblTemp frame3: {{10, 10}, {355, 80}} Мне нужна фактическая ширина в cellForRowAtIndexPath, потому что мне нужно выполнить некоторые вычисления . И вызов метода layoutSubviews после возврата ячейки из cellForRowAtIndexPath
Привет ты их
CGFloat wid = [[UIScreen mainScreen] bounds] .size.width - 20 Я не могу этого сделать, потому что на самом деле у меня много объектов, поэтому я не могу использовать 20 значений жесткого ядра для получения ширины.
На самом деле для демонстрации я использую только UILabel в Первоначально там 2 UILabels Один UIImageView и рядом с UIImageView есть UILabel, поэтому "Хан", извините, я не могу использовать значение 20 в качестве жесткого ядра, а размер моей ячейки динамический
Позвольте нам продолжить обсуждение в чате.
Не знаю, какой расчет вы хотите, если он не соответствует ссылке на ячейку, тогда получите ссылку на Vc внутри ячейки, а затем делайте то, что хотите, с помощью layoutSubviews
Согласно ширине UILabel я должен рассчитать размер данных. Чтобы рассчитать размер данных, мне нужен размер UIlabel, связанный с iPhone5, но я получаю размер UIlabel iPhone8.
в iPhone5 я получаю iPhone8 UIlabel size 2018-08-10 19: 01: 21.591964 + 0530 demoCell [11575: 6891249] lblTemp frame3: {{10, 10}, {355, 80}}
привет @sh_khan ты их?
Вместо ширины жесткого кодирования используйте
UIScreen.main.bounds.width
для ширины ячейки.