我正在使用NSLog来检查UITextView。我的代码中有以下日志记录语句:
NSLog(@"textView: %@",textView);
NSLog(@"textView.frame: %@",textView.frame);
NSLog(@"[textView frame]: %@",[textView frame]);
在控制台的输出中,我得到以下内容:
2010-11-29 22:00:38.252 MenuMaker[57602:207] textView: <UITextView: 0x3b3afe0; frame = (0 0; 320 387); text = 'blah...'; clipsToBounds = YES; autoresize = RM+BM; layer = <CALayer: 0x3b3afa0>>
2010-11-29 22:00:38.254 MenuMaker[57602:207] textView.frame: (null)
2010-11-29 22:00:38.254 MenuMaker[57602:207] [textView frame]: (null)
第一行输出,因为它包含'frame =(0 0; 320 387)'位,让我相信UITextView的帧变量都已设置完毕。但是为什么接下来的两行在这种情况下显示为null?他们不应该抛弃框架的价值吗?
提前致谢
答案 0 :(得分:50)
正如其他人所说,CGRect只是一个结构,因此缺少一个-description方法(这是NSLog使用的NSString的+ stringWithFormat静态方法 - 用格式字符串替换%@)。因此,您无法直接将其传递给NSLog。
但是,不需要像建议的那样单独输出任何值。 Cocoa提供了许多内置方法,可以将多个Core Graphics结构呈现为字符串:
NSStringFromCGRect()
NSStringFromCGPoint()
NSStringFromCGSize()
NSStringFromCGAffineTransform()
等等。因此,以字符串形式输出CGRect变得非常容易:
NSLog(@"%@", NSStringFromCGRect(rect));
您可以在“字符串转换”下找到所有这些辅助方法here。
答案 1 :(得分:10)
你也可以这样做
NSLog(@"%@",[NSValue valueWithCGRect:textView.frame]);
答案 2 :(得分:4)
UIView.frame
只是一个CGRect
结构(它依次包含CGPoint
和CGSize
结构。
因此不涉及任何类,并且因为只有类可以具有字符串表示,所以显示null
。如果你想要框架的值你必须做什么是这样的:
NSLog(@"textView.frame origin: %f %f", textView.frame.origin.x, textView.frame..origin.y);
NSLog(@"textView.frame size: %f %f", textView.frame.size.width, textView.frame.size.height);
答案 3 :(得分:3)
TextView的。 frame将返回CGRect值。所以如果你想知道textView的框架值
NSLog(@"textView frame height: %f",textView.frame.size.height);
NSLog(@"textView frame width: %f",textView.frame.size.width);
NSLog(@"textView frame x Position: %f",textView.frame.origin.x);
NSLog(@"textView frame y Position: %f",textView.frame.origin.y);
当NSLog不识别对象所收到的内容时,NSLog会将该值视为null。
答案 4 :(得分:-1)
在Swift中很简单:
println("\(textView.frame)")