iPhone UIButton setFrame возвращает неправильный размер кадра - PullRequest
1 голос
/ 22 февраля 2011

Я пытаюсь создать новую кнопку определенного размера в UIView.Как это происходит, это представление будет использоваться в tableViewCell, например так.

UIImageCtrlBtnView *newView = [self initImageCtrlBtnsInViewWithHeight: 50 withWidth : 280];
[cell.contentView addSubview:newView];

Я создаю новое представление и несколько кнопок в методе initImageCtrlBtnsInViewWithHeight.

-(UIView*) initImageCtrlBtnsInViewWithHeight: (CGFloat) rowHeight withWidth: (CGFloat) rowWidth {

UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, rowWidth, rowHeight)];
newView.tag = kImageCtrlBtnViewTag;
newView.clipsToBounds = YES;

    // finding the right size of the button by setting the button size to some fraction
    // of the view size.
CGRect largeButtonFrame = CGRectMake(rowWidth*0.1+newView.frame.origin.x, rowHeight*0.2+newView.frame.origin.y, rowWidth*0.8, rowHeight*0.6);
UIButton *largeMoreButton = [UIButton buttonWithType:UIButtonTypeCustom];
largeMoreButton.tag = kLargeMoreBtnTag;
[largeMoreButton setTitle:@"Add Photo" forState:UIControlStateNormal ];         
[largeMoreButton setFrame: largeButtonFrame];

    // I check the size of the button frame.
   DLog(@"large more btn frame: %d, %d, %d, %d", largeMoreButton.frame.origin.x, largeMoreButton.frame.origin.y, largeMoreButton.frame.size.width, largeMoreButton.frame.size.height);    
etc.

проблема в том, что когда я возвращаю кнопку после setFrame, она огромна.Вот вывод из журнала.Кнопка думает, что это 1076101120 максимум!

large more btn frame: 0, 1077706752, 0, 1076101120

Я проверил значение прямоугольника largeButtonFrame в журнале отладки, и это, как я и ожидал.

(gdb) print largeButtonFrame
$1 = {
origin = {
   x = 28.5, 
   y = 10
}, 
size = {
  width = 228, 
  height = 30
}
}

В конце, когда представление отображается в tableView, я получаю это сообщение об ошибке и кучу ошибок CGContext.

-[<CALayer: 0xff7b550> display]: Ignoring bogus layer size (320.000000, 1120403456.000000)
-[<CALayer: 0xff778a0> display]: Ignoring bogus layer size (300.000000, 1120403456.000000)

Когда отображается моя таблица, кнопки выглядят как правильный размер, но эта ячейка в основномрасширяется навсегда в представлении таблицы, и я не могу прокрутить до любой другой ячейки позади него.

Я также пытался установить размер кнопки различными способами (например, установить границы кнопки, а затем центрироватьили используйте средство создания кнопки UIButton buttonWithType, затем устанавливая фрейм), но, похоже, ничего из этого не имеет значения.

Поиск сообщения об ошибке, это сообщение об ошибке появляется, только когда люди пытаютсясделать анимацию.Но я не пытаюсь делать анимацию здесь, просто настраиваю несколько кнопок.

1 Ответ

2 голосов
/ 22 февраля 2011

Э-э ... да, это поплавок.

DLog(@"large more btn frame: %f, %f, %f, %f", largeMoreButton.frame.origin.x, largeMoreButton.frame.origin.y, largeMoreButton.frame.size.width, largeMoreButton.frame.size.height);    

С учетом предупреждений, которые вы получаете, когда запускаете приложение, я не совсем уверен, что это такое, но я готов поспорить, что вы не используете значение с плавающей запятой для размера, это просто на основе по номерам, которые он вам дает, так что я не уверен на 100%.

...