美文网首页
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