• iOS开发小技巧


    1.

    解析详情页(是webView)遇到的3个问题:

    1.图片太大,超出屏幕范围

    2.怎么在webView上面添加一行文字

    3.文字太小

    1.解决方法

    webView.scalesPageToFit =YES;

    2.字符串拼接html代码

    3.解决方法

    设置代理

    - (void)webViewDidFinishLoad:(UIWebView *)webView{

    [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '250%'"];

    }

    2.

    去掉状态栏

    在要隐藏的控制器里的viewWillAppear里添加:

    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

    [self prefersStatusBarHidden];

    [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];

    }

    再添加prefersStatusBarHidden方法

    - (BOOL)prefersStatusBarHidden

    {

    return YES;//隐藏为YES,显示为NO

    }

    3.

    高德地图显示附近信息,设置范围后还是20条数据,原因是默认是20条,最多50条,大于50条信息会放在下一页。

    //设置默认条数

    request.offset = 50;

    //设置显示页数

    request.page = 1;

    4.

    github部分电脑上传到本地过程中未能正常上传,不能显示工程(解决方 法为显示隐藏文件,删除自带git文件.原因:xcode7 自带git 导致导入过程中默认为已经导入github)

    5.

    1.合并的时候发生冲突

    打开存在冲突的文件,会看到如下标志:

    <<<<<<<标记冲突开始,后面跟的是当前分支中的内容。

    HEAD指向当前分支末梢的提交。

    =======之后,>>>>>>>之前是要merge过来的另一条分支上的代码。

    >>>>>>>之后的跟的是要合并过来的分支的名称

    6.

    *** Terminating app due to uncaught exception ‘NSGenericException’, reason: ‘*** Collection <__NSArrayM: 0xb550c30> was mutated while being enumerated.’

    当程序出现这个提示的时候,是因为你一边便利数组,又同时修改这个数组里面的内容,导致崩溃,网上的方法如下:

    NSMutableArray * arrayTemp = xxx;

    NSArray * array = [NSArray arrayWithArray: arrayTemp];

    for (NSDictionary * dic in array) {

    if (condition){

    [arrayTemp removeObject:dic];

    }

    }

    这种方法就是在定义一个一模一样的数组,便利数组A然后操作数组B

    7.

    让tableView的头视图跟着tableView一起滑动

    需要将tableViewController中的tableView样式改为grouped的,因为tableView默认的样式是plain,在tableViewCotroller中重写initWithStyle方法

    方法1:

    //重写init方法,将tableView的样式设为group的样式,区头就会跟着滑动了 最好不要重写 否则 全变成Grouped样式 可在初始化时候设置样式

    -(instancetype)initWithStyle:(UITableViewStyle)style{

    if (self = [super initWithStyle:UITableViewStyleGrouped]) {

    return self;

    }

    return self;

    }

    方法2:修改tableView的位置

    - (void)loadHeaderImage

    {

    CGFloat offest = 120;

    self.tableView.contentInset = UIEdgeInsetsMake(offest, 0, 0, 0);

    self.imgVIew = [[UIImageView alloc] init];

    self.imgVIew.frame = CGRectMake(0, -offest, kScreenWidth, offest);

    self.imgVIew.image = [UIImage imageNamed:@"image090"];

    [self.tableView addSubview:self.imgVIew];

    }

    UIEdgeInsets UIEdgeInsetsMake (

    CGFloat top,

    CGFloat left,

    CGFloat bottom,

    CGFloat right

    );

    8.

    1.

    // 去掉cell横线

    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

    2.

    //  点击单元格的时候取消选中单元格

    //  点击单元格的时候取消选中单元格                                                 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];

    }

    9.

    1、错误描述:Xcode重装后,导致cocopods执行安装第三方时出错

    错误信息:xcrun: error: active developer path ("/Users/apple/Desktop/Xcode5.app/Contents/Developer") does not exist, use xcode-select to change

    解决方案:命令行输入:sudo xcode-select -switch /Applications/Xcode2.app/Contents/Developer

    备注:Xcode2为新装Xcode的名称

    10.

    searchBar搜索拼接中文,需要转换utf8编码

    NSString *typeString = (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,(__bridge CFStringRef)(需要转换的文字),NULL,(CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8);

    11.

    定义tableView上方有一条多余白框 (原因,系统默认给的可滑动距离,用如下方法解决去除)

    self.automaticallyAdjustsScrollViewInsets = NO;

    12.

    This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes.  This will cause an exception in a future release

    集合视图加载完数据以后.必须要调用reloadData方法刷新视图,否则程序会崩溃,因为item的个数为第一次运行的个数, 且因为后面的不会走创建item个数的方法,如果刷新后,会走这个方法,这样就避免了item与数据的不对应

    13.

    当collectionView的内容没有超过collectionView的大小时,如果想让collectionView始终滑动,则可以设置alwaysBounceVertical的值为YES

    14.

    可视化自适应cell高度的时候,如果多个控件需要自适应,最后一个控件需要四个约束

    自适应代码:

    self.tableView.rowHeight = UITableViewAutomaticDimension;

    self.tableView.estimatedRowHeight = 100;

    15.

    问题描述:tableView初始加载无数据时,不想显示单元格线

    解决方案:当tableView加载完毕时,调用如下方法

    //tableView参数为要隐藏单元格线的tableView

    -(void)setExtraCellLineHidden: (UITableView *)tableView

    {

    UIView *view = [UIView new];

    view.backgroundColor = [UIColor clearColor];

    [tableView setTableFooterView:view];

    }

    16.

    .LeanCloud Pointer类型关系中属性的获取

    解决方法:LeanCloud只会返回id,不会返回属性,要在需要的时候自己查询匹配再使用

    17.

    实现拖动列表时放大列表顶部的图片,在集合视图上添加该视图后,视图图片会遮挡住区头视图的内容.

    解决办法:

    将图片视图的contentMode属性设置为UIViewContentModeScaleToFill,使图片视图的大小随着自己设置的frame缩放.

    UIViewContentMode 是UIView的属性

    默认是UIViewContentModeScaleToFill

    UIViewContentModeScaleToFill,//图片内容随着图片视图的frame进行缩放,图片可能会变形

    UIViewContentModeScaleAspectFit,//保证图片比例不变,而且全部显示在图片视图上,但图片视图可能会有空白

    UIViewContentModeScaleAspectFill,//图片比例不变,而且填充整个图片视图,根据原图片的大小填充视图

    UIViewContentModeRedraw,通过设置contentMode属性值为UIViewContentModeRedraw。那么将在每次设置或更改frame的时候自动调用drawRect:方法

    ter下面这几个属性就是设置图片视图的内容是在顶部还是底部之类的位置,按字面意思就可以理解

    UIViewContentModeTop,

    UIViewContentModeBottom,

    UIViewContentModeLeft,

    UIViewContentModeRight,

    UIViewContentModeTopLeft,

    UIViewContentModeTopRight,

    UIViewContentModeBottomLeft,

    UIViewContentModeBottomRight,

    UIViewContentModeBottom,

    UIViewContentModeLeft,

    UIViewContentModeRight,

    UIViewContentModeTopLeft,

    UIViewContentModeTopRight,

    UIViewContentModeBottomLeft,

    UIViewContentModeBottomRight

    18.

    .github上传代码通过cocopods导入第三方,下载后有人工程报错 显示引入包的头文件找不到

    用 cocoaPods 添加第三方库, 成功之后,在工程中却导入不了头文件,而且根本没有提示,

    那么,我们就在 TARGETS --> Build Settings —> User Header Search Paths 中 添加 ${SRCROOT}  , 并把 no-recursive 改为 recursive

    19.

    遇到一坑:  数据解析正确,model(数据模型)中的属性等都正确 在控制器中去赋值,却没有值,打断点发现根本没有走model(数据模型)中  .m  文件的setValue:(id)value forUndefinedKey:(NSString *)key的方法

    原因: 因为调用解析数据的方法时,使用了 block 方法传值, block方法在执行的顺序上  是先执行大括号外面的,然后再走block块大括号内部,如果在block外面写赋值,那么值就是空的,因为值还没传递出来,所以这时候要把赋值方法放在block内部,值就可以顺利传递了!

    20.

    project.pbxproj合并冲突问题

    由于目录结构修改导致冲突(新增文件等)

    合并之后导致工程无法打开

    解决方法

    打开project.pbxproj文件

    查找类似<<<<<<<<,++++++++,>>>>>>>>所在的行

    找到之后删除整行

    保存

    21.

    button内部有imageView和titleLabel两个控件,按钮的内边距分为content(整体)、title(标题)、image(图片)三个,因此对于水平排布,可以通过内边距和修改控件坐标两种方式实现;而竖直排布只能通过修改坐标,因为UIButton默认的是水平排布。

    22.

    .解析的数据去掉html标签

    - (NSString *)filterHTML:(NSString *)html{

    NSScanner * scanner = [NSScanner scannerWithString:html];

    NSString * text = nil;

    while([scanner isAtEnd]==NO)

    {

    //找到标签的起始位置

    [scanner scanUpToString:@"<" intoString:nil];

    //找到标签的结束位置

    [scanner scanUpToString:@">" intoString:&text];

    //替换字符

    html = [html stringByReplacingOccurrencesOfString:[NSString    stringWithFormat:@"%@>",text] withString:@""];

    }

    //    html = [_message stringByReplacingOccurrencesOfString:@" " withString:@""];

    //            NSString * regEx = @"<([^>]*)>";

    //            html = [html stringByReplacingOccurrencesOfString:regEx withString:@""];

    return html;

    }

    23.

    网络请求的图片,需要实现点击响应控制器跳转的事件,并且跳转的页面需要得到上个页面网络请求来的图片,对其进行操作,这时使用block传值的同时需要对imageView进行copy,否则点击图片跳转第二个页面在返回第一个页面会造成第一个的图片消失,解决问题的具体代码:- (UIImageView*)duplicate:(UIImageView*)view

    {

    NSData * tempArchive = [NSKeyedArchiver archivedDataWithRootObject:view];

    return [NSKeyedUnarchiver unarchiveObjectWithData:tempArchive];

    }

    24.

    引入友盟分享,从友盟官网下载,拖入项目,与COCOAPODS 冲突

    使用 COCOAPODS  引入,虚拟机测试没有问题,真机无法测试

    错误信息:

    'Pods/UmengSocial/Umeng_SDK_Social_iOS_ARM64_4.3/UMSocial_Sdk_Extra_Frameworks/LaiWang/libSocialLaiWang.a(LWApiRequest.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64

    clang: error: linker command failed with exit code 1 (use -v to see invocation)

    解决方法:

    1.找到TARGETS下的Build Settings;

    2.搜索Bitcode,设置为NO;

    25.

    cell重用问题,cell上的控件点击后改变状态或者值,当时有效,活动后出现错乱。

    解决方案:用字典将点击的cell的row当成KEY值,状态或者值当成value存起来,在cellForRow方法里,根据字典里面的key值去设置对应的cell的状态或者值。

    26.

    tableView的header如果想设置高度为0,不能return 0,这时会有高度。可以设置成0.01。

    27.

    text 文本无法实现文字间距 可以使用 attributedText

    //字间距

    [attributedStr addAttribute: NSKernAttributeName value: @1 range: NSMakeRange(0, healthInformation.description_string.length)];

    28.

    定义static类型变量应该在本文件内使用,文件之间无影响,但是,可能会出现缓存问题报错,建议不要重复命名.显示错误不会正确提示,很难找

    29.

    const修饰的常量的值不能修改,同个工程中不能出现两个一样的常量名。

  • 相关阅读:
    排序算法 之 冒泡排序 插入排序 希尔排序 堆排序
    DataStructure之线性表以及其实现
    使用可重入函数进行更安全的信号处理
    内存经济学
    电脑通用技能
    循环套餐的逻辑
    占用了多少内存
    索引的用法
    电脑的眼缘
    字符串积木
  • 原文地址:https://www.cnblogs.com/weiboyuan/p/5311102.html
Copyright © 2020-2023  润新知