美文网首页
iOS开发中问题与解决汇总

iOS开发中问题与解决汇总

作者: 暗物质 | 来源:发表于2020-01-19 16:23 被阅读0次

    1、iOS 真机测试错误“The application bundle does not contain a valid identifier”

    • 解决1:尝试一下 command + alt + shift + k 然后重新run一下代码。
    • 解决2:在 Xcode > Preferences > Locations > Derived Data 找到 DerivedData 的路径,删除 DerivedData 下的所有文件。

    2、UIScrollView中嵌套UITableview, 然后IQKeyboardManagerSwift 对cell中的输入框UITextfield失效

    • 解决:tableView.isScrollEnabled = false 将tableView的滑动关闭

    3、上线警告 WARNING ITMS-90076: "Potential Loss of Keychain Access"

    这是由于把 app从一个账号转移到另一个账号上去了,然后又提版本,出现如下警告,可以不用管它,下一步就行。

    4、上传IPA包到 iTunes Connect 后,收到警告:

    ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of new apps that use UIWebView APIs starting from April 2020. See https://developer.apple.com/documentation/uikit/uiwebview for more information.

    原因:项目中用到了 WebViewJavascriptBridge 里面有UIWebView 的代码。代码两年多没更新了,故拖到本地并删除WebViewJavascriptBridge 类文件。并做了个人pod库ZSWKWebViewVC 如果以后有更新,自己再手动更新。

    5、做推送的时候注册通知,收到如下注册通知失败的消息:

    code=3000 NSLocalizedDescription=未找到应用程序的“aps-environment”的授权字符串

    原因:
    code=3000是由于iPhone上的配置文件的app identity是带通配符的,而推送不能用带通配符的

    解决:

    1.去Provisioning里面生成新的Profile,配置的app id是不带通配符的,与项目的bundleID 一样。
    2.删除Xcode里面原来的push profile(如果没有就不用删除)再次双击新下载的profile(mobileprovision文件)
    3.在项目的target里面选择新的profile然后编译
    

    6、iOS去掉导航栏navigationBar下的横线

     //去除导航栏下方的横线
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:[UIColor appNavigationBarColor]]
                           forBarPosition:UIBarPositionAny
                               barMetrics:UIBarMetricsDefault];
    [self.navigationController.navigationBar setShadowImage:[UIImage new]];
    

    iOS 隐藏/去掉 导航栏返回按钮中的文字

    最近iOS项目中要求导航栏的返回按钮只保留那个箭头,去掉后边的文字,在网上查了一些资料,最简单且没有副作用的方法就是

    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60)
     forBarMetrics:UIBarMetricsDefault];
    

    7、集成支付宝SDK时的错误

    问题:app集成支付宝报错:"openssl/asn1.h file not found"

    解决办法:在自己工程文件夹里建一个文件夹,随便起什么名字。把支付宝所需要的东西都拷贝进去,然后add files,然后找到TARGETS-Build Settings,在里面找到如下位置


    解决

    8、自定义UISearchBar(修改placeHolder文字颜色,修改_searchField文字颜色,修改放大镜图片等)

    iOS 13新系统有变化,待更新

    自定义UISearchBar
    //修改背景图片,隐藏边框
    [_searchBar setBackgroundImage:[UIImage imageWithColor:[UIColor clearColor]]];
    _searchBar.placeholder = @"新房、二手房、租房";
    
    //获取searchBar里面的TextField
    UITextField *searchField = [_searchBar valueForKey:@"_searchField"];
    //更改searchBar 中PlaceHolder 字体颜色
    [searchField setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"];
    //更改searchBar输入文字颜色
    searchField.textColor= [UIColor whiteColor];
    //设置搜索框中TextField的背景图
    [_searchBar setSearchFieldBackgroundImage:[UIImage imageWithColor:[UIColor colorWithWhite:1 alpha:0.2] size:CGSizeMake(200, 30) andRoundSize:15] forState:UIControlStateNormal];
    
    //方法1、修改放大镜图片
    [self.searchBar setImage:[UIImage imageNamed:@"search"] 
            forSearchBarIcon:UISearchBarIconSearch state:UIControlStateNormal];
    //方法2、修改放大镜
    UIImage *image = [UIImage imageNamed:@"search"];
    UIImageView *iconView = [[UIImageView alloc] initWithImage:image];
    iconView.frame = CGRectMake(0, 0, image.size.width , image.size.height);
    searchField.leftView = iconView;
    

    UISearchBar详细的属性介绍

    let searchBar = UISearchBar()
            searchContentView.addSubview(searchBar)
            searchBar.snp.makeConstraints { (make) in
                make.leading.equalToSuperview().offset(10)
                make.trailing.equalToSuperview().offset(-10)
                make.bottom.equalToSuperview().offset(-10)
                make.height.equalTo(36)
            }
            
            searchBar.placeholder = "输入运单信息搜索"
            searchBar.backgroundImage = UIImage()
            searchBar.backgroundColor = UIColor.white
            
            if #available(iOS 13.0, *) {
                searchBar.searchTextField.tintColor = UIColor.appMainColor
                searchBar.searchTextField.backgroundColor = UIColor.init(hex: "efefef")
                searchBar.searchTextField.font = UIFont.systemFont(ofSize: 17, weight: .light)
            } else {
                if let views = searchBar.subviews.last?.subviews,
                    let kind = NSClassFromString("UISearchBarTextField") {
                    for v in views {
                        if v.isKind(of: kind) {
                            let tf = v as! UITextField
                            tf.tintColor = UIColor.appMainColor
                            tf.backgroundColor = UIColor.init(hex: "efefef")
                            tf.font = UIFont.systemFont(ofSize: 17, weight: .light)
                        }
                    }
                }
            }
            
            searchBar.delegate = self
    

    9、Command CompileSwift failed with a nonzero exit code

    Xcode 11.3, Swift 4.2新建项目出现这个问题.

    新建项目直接复制上个项目的podfile文件内容,然后pod install ,之后编译出现这个问题.
    搞了好久无法解决,最后重新建一个项目,然后pod里面只放一个库,编译成功后,再把剩下的全部放进去,OK.
    或者删除 Pods文件夹、xxx.xcworkspace文件、Podfile.lock文件、Podfile文件只留一个库,重新安装下。我这里编译成功了,然后把剩下的库打开,安装成功!

    10、有时候项目中需要计算行数和指定元素的列数,计算如下

    计算行数:
    x = 总个数
    y = 一行的个数
    行数 = ((x - 1) / y) + 1

    计算指定元素的列数:
    用上面的公式计算出指定元素所在的行数
    y = 一行的个数
    列数 = 元素序号 - (行数 * y)

    11、 Unknown class in Interface Builder file 解决方案

    在用swift项目中xib导入自定义View后,运行时报错: [Storyboard] Unknown class in Interface Builder file.

    最终解决如下:

    检查storyboard或xib中的控制器,使module匹配即可。

    因为我把自定义view在原项目封装出来了,所以这里造成找不到class。

    image.png

    12、设置xib 或者 VC中设置 UITableView/UIScrollView 起始位置在状态栏下方开始

    // tableView
    if #available(iOS 11.0, *) {
                scrollView.contentInsetAdjustmentBehavior = .never;
            } else {
                self.automaticallyAdjustsScrollViewInsets = false;
            }
    // scrollView
    if #available(iOS 11.0, *) {
                scrollView.contentInsetAdjustmentBehavior = .never;
            } else {
                self.automaticallyAdjustsScrollViewInsets = false;
            }
    // xib中的scrollView重新社会约束,因为一般设置的是safeArea
    scrollView.snp.remakeConstraints { (make) in
                make.leading.trailing.top.equalToSuperview()
                if #available(iOS 11.0, *) {
                    make.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottom)
                } else {
                    make.bottom.equalTo(bottomLayoutGuide.snp.bottom)
                }
            }
    

    相关文章

      网友评论

          本文标题:iOS开发中问题与解决汇总

          本文链接:https://www.haomeiwen.com/subject/jjmmyftx.html