iPhone UIButton setFrame返回错误的帧大小

时间:2011-02-22 18:30:34

标签: iphone uiview uibutton calayer

我正在尝试在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创建者,然后设置框架),但这些似乎都没有差异。

通过Google搜索错误消息,只有在人们尝试制作动画时才会出现此错误消息。但我不想在这里做任何动画,只是设置一些按钮。

1 个答案:

答案 0 :(得分:2)

嗯...这是一个漂浮物。

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);    

当你运行应用程序时会收到警告,我不完全确定它们是什么,但我愿意打赌你没有使用大小的浮动值,这只是基于关于它给你的数字,所以我不是百分百肯定。