开发工具和技巧 xcode使用鸡汤文iOS零碎知识

iOS 开发中遇到的问题以及解决方法

2016-11-03  本文已影响1431人  逍遥晨旭

1、图片出现锯齿(显示区域与图片像素不匹配)

解决方案:

先将图片画出来,进行裁剪使用
- (UIImage *)scaleToSize:(UIImage )img size:(CGSize)size {
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
[img drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage
scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}

2、彻底移除cell 的分割线(有的cell要分割线,有的cell不要分隔线,又有的cell分割线拒里前端15pix。搞得我也真是醉了,如果用自定义分割线的话也不好处理。)

解决方法:

在自定义cell中重写UITableviewCell的addSubView:方法
- (void)addSubview:(UIView *)view
{
if (![view isKindOfClass:[NSClassFromString(@"_UITableViewCellSeparatorView") class]] && view)
[super addSubview:view];
}

3、webViewDidFinishLoad 执行多次的有关问题说网页内有异步请求或者重定向时,就会多次调用上述方法

解决办法:

(1)、用webView的isLoading属性:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
if (webView.isLoading) {
return;
}
//code...
}
这样每进入一个新的网页,webViewDidFinishLoad只执行一次。
(2)、定义一个属性:@property(nonatomic) BOOL isFirstLoadWeb;
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
if (!self.isFirstLoadWeb) {
self.isFirstLoadWeb = YES;
}else{
return;
//code...
}

4、你在viewcontroller中使用scrollview,并在scrollview中的添加了viewA,但viewA的位置总是差些像素。通过Dlog发现又都是正常的。

解决方法:

是viewcontroller 的automaticallyAdjustsScrollViewInsets这个属性在作怪。automaticallyAdjustsScrollViewInsets的作用是:让scroll view的内容自动调整,且他的默认是YES;不想让它自动调整就将它设置为NO,就好了。(即:self.automaticallyAdjustsScrollViewInsets = NO;)

5、想打印视图的层次结构

解决方法:

打印视图的层次结构的方法叫做 recursiveDescription,recursiveDescription能打印出任意视图的视图层次结构。值得注意是它是一个私有方法, “不应该被包含在任何会被放到 App Store 的代码里”,但它对与视图层次结构实在非常有用。
以打印一个cell的层次结构为例:
NSLog(@"Cell recursive description:\n\n%@\n\n", [cell performSelector:@selector(recursiveDescription)]);

6、view被导航条给覆盖了,并没有从导航条的下面开始布局

解决方法:

(1)、设置edgesForExtendedLayout

   self.edgesForExtendedLayout = UIRectEdgeNone; //view不需要拓展到整个屏幕

(2)、设置导航条的透明度

   self.navigationController.navigationBar.translucent = NO;

7、断点调试技巧

(1)、条件断点

打上断点之后,对断点进行编辑,设置相应过滤条件。下面简单的介绍一下条件设置:

Condition:返回一个布尔值,当布尔值为真触发断点,一般里面我们可以写一个表达式。
Ignore:忽略前N次断点,到N+1次再触发断点。
Action:断点触发事件,分为六种:
AppleScript:执行脚本。
Capture GPU Frame:用于OpenGL ES调试,捕获断点处GPU当前绘制帧。
Debugger Command:和控制台中输入LLDB调试命令一致。
Log Message:输出自定义格式信息至控制台。
Shell Command:接收命令文件及相应参数列表,Shell Command是异步执行的,只有勾选“Wait until done”才会等待Shell

命令执行完在执行调试。

Sound:断点触发时播放声音。

这些功能平时在调试程序的过程中都可以进行尝试,说实话我用的设置Condition项会较多些。

断点编辑.png

(2)、异常断点

异常断点可以快速定位不满足特定条件的异常,比如常见的数组越界,这时候很难通过异常信息定位到错误所在位置。这个时候异常断点就可以发挥作用了。

添加异常断点的步骤:

异常断点.png 右击异常断点.png 编辑异常断点.png

(3)、符号断点

符号断点的创建方式和异常断点一样一样的,在符号断点中可以指定要中断执行的方法:
举个例子,常见的场景,我想让它执行到ViewController类中的viewWillAppear方法就中断执行:

添加符号断点的步骤:

符号断点.png 编辑符号断点.png

Symbol:[ViewController viewWillAppear:]即[类名 方法名]可以执行到指定类的指定方法中开始断点。如果只有viewWillAppear:即方法名,它会执行到所以类中的viewWillAppear:方法中开始断点。

PS:驾驭命运的舵是奋斗。不抱有一丝幻想,不放弃一点机会,不停止一日努力。

James.png
上一篇 下一篇

猜你喜欢

热点阅读