我正在尝试在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搜索错误消息,只有在人们尝试制作动画时才会出现此错误消息。但我不想在这里做任何动画,只是设置一些按钮。
答案 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);
当你运行应用程序时会收到警告,我不完全确定它们是什么,但我愿意打赌你没有使用大小的浮动值,这只是基于关于它给你的数字,所以我不是百分百肯定。