【MISSAJJ原创-iOS】 Xcode9~iOS 11和iPhone X 适配问题集

2019-09-17 11:20 来源:未知

并为此设置了分类BaseTableViewController PageStatus,在分拣中进行部分暗操作。

图4: 诺基亚 X下拉刷新出现错位难点[图形加载中,请耐心等待....]

调用

类方式直接调用封装好的接口就行,orderId是内需向后台央求的订单号(比如:D123457890)

/**
 根据订单信息向后台申请prepayId以调用支付宝支付接口

 @param amount  金额
 @param orderId  订单信息(支付前请求后台给的没有签名过的订单号)
 */
  (void)sendAliPayRequestWithAmount:(NSString *)amount
                            orderId:(NSString *)orderId;

目录:一.自定义textfired完结按键二. 调起微信之后显得支付验证具名失利三.runtime分类设置关联的选拔

本人的提出:在 OPPO X 下照旧最棒依然有导航栏的筹算相比较赏心悦目, 因为遮掩导航栏后, 刘海会把顶上部分控件切割掉, 画面就比较难堪了....哈哈~~

设置(个人喜欢类方法,调用方便,可和煦修改)

在AppDelegate.m文件中
openUSportageL方法中安装回调,支付宝不用最先化,是不是很开森0.0(这里三个是iOS9之下的系统调用的系统方法和多个是iOS9以上的体系调用的体系方法,都要安装)

#pragma mark - OpenURL回调结果
//iOS9-
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    [self handleOpenURLWithURLHost:url];
    return YES;
}
//iOS9和9 
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options{
    [self handleOpenURLWithURLHost:url];
    return YES;
}

- (void)handleOpenURLWithURLHost:(NSURL *)url{
 NSLog(@"url.host:%@", url.host);
    //支付宝
   if ([url.host isEqualToString:@"safepay"]||[url.host isEqualToString:@"platformapi"]) {
        [HHAliPaySDK handleOpenURL:url];
    }

}
- drawRect:rect { [super drawRect:rect]; UIView *bar = [[UIView alloc] initWithFrame:CGRectMake(0,0, Screen_Width,44)]; bar.backgroundColor = kBgColor; UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(Screen_Width - 70, 7,60, 30)]; [button setTitle:@"完成"forState:UIControlStateNormal]; [button setTitleColor:kThemeColor forState:UIControlStateNormal]; button.layer.borderColor = [UIColor colorWithHexString:@"62C6B2"].CGColor; button.layer.borderWidth =1; button.layer.cornerRadius =3; [_bar addSubview:button]; [button addTarget:self action:@selector(btnOnClick) forControlEvents:UIControlEventTouchUpInside]; self.inputAccessoryView.userInteractionEnabled = YES; self.inputAccessoryView = bar;}- hitTest:point withEvent:(UIEvent *)event{ __block UIView * view = [super hitTest:point withEvent:event]; if (view == nil) { [self.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if ([obj isKindOfClass:[UIButton class]]) { view = obj; *stop = YES; } }]; CGPoint newPoint = [view convertPoint:point fromView:self]; // 判断触摸点是否在button上 if (CGRectContainsPoint(view.bounds, newPoint)) { view = view; }else{ return nil; } } return view;}-  btnOnClick { if (self.finishCallBack) { self.finishCallBack(); }}
/*****宏定义 *****///导航栏高度#define MANavBarHeight isIPhoneX ? 88 : 64//底部Tabbar 高度#define MATabBarHeight isIPhoneX ? 83 : 49 //状态栏高度#define MAStatusBarHeight isIPhoneX ? 44 : 20

//一些相关同步对应的代码// set navigationBar backgroundImage- MA_setBackgroundImage:(UIImage *)image{ [self.backgroundView removeFromSuperview]; self.backgroundView = nil; if (self.backgroundImageView == nil) { // add a image(nil color) to _UIBarBackground make it clear [self setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; self.backgroundImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.bounds), MANavBarHeight)]; self.backgroundImageView.autoresizingMask = UIViewAutoresizingFlexibleWidth; // _UIBarBackground is first subView for navigationBar [self.subviews.firstObject insertSubview:self.backgroundImageView atIndex:0]; } self.backgroundImageView.image = image;}// set navigationBar barTintColor- MA_setBackgroundColor:(UIColor *)color{ [self.backgroundImageView removeFromSuperview]; self.backgroundImageView = nil; if (self.backgroundView == nil) { // add a image(nil color) to _UIBarBackground make it clear [self setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; self.backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.bounds), MANavBarHeight)]; self.backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth; // _UIBarBackground is first subView for navigationBar [self.subviews.firstObject insertSubview:self.backgroundView atIndex:0]; } self.backgroundView.backgroundColor = color;}

客户端题外话,关于RSA

(上边引进的是阮一峰写的一篇讴歌MDXSA算法原理,都是明媒正娶数学知识,看的自家一愣一愣的,多谢大大的讲解)

签订和验签都付出后台的来做,对大家客商端的话,既安全有有益(真不是我们客商端不做,是法定建议的,上边小编有认证过,涉及钱的难点,一切为了安全),客商端那边是无需通晓迈凯伦570SA加密解密的(没有错,反正我是不会),不过供给后台明白,最简易的话,在生育订单时,要求运用私钥生成具名,在拍卖回来的耗费结果时,需求动用公钥验证重返结果是或不是被篡改.验证通过才算支付成功.具体后台怎么验签,支付宝提供了方法,他给服务端的SDK提供了三个工具类用来验签,官方举的事例是Java

Map<String, String> paramsMap = ... //将异步通知中收到的待验证所有参数都存放到map中
boolean signVerified = AlipaySignature.rsaCheckV1(paramsMap, ALIPAY_PUBLIC_KEY, CHARSET) //调用SDK验证签名
if(signVerfied){
   // TODO 验签成功后
   //按照支付结果异步通知中的描述,对支付结果中的业务内容进行1234二次校验,校验成功后在response中返回success,校验失败返回failure
}else{
    // TODO 验签失败则记录异常日志,并在response中返回failure.
}

改建之后(ios10和ios11联合展现)

彩民之家论坛9066777 1显示屏快速照相2017-09-24 05.23.34.png

设置UXC60L Scheme(要铭记这一个标记,调用支付宝方法时会用到那几个参数)

修改 info.plist 文件 U福睿斯L types 项中前边的URAV4L Schemes内容,官方建议跟经纪人的app有自然的标示度,要形成和其余的厂家app不另行,否则或许会产生支付宝重返的结果不可能正确跳回商家app。(举个例子你们项目名称 AliPay,小编这边设置了支付宝,qq,微信,微博,只用到支付宝的话,就增多支付宝的就ok)

彩民之家论坛9066777 2

2EA80578-7343-433E-8803-73E4E826BE11.png

:首先刚开端接微信支付的时候,一直拉不起微信顾客端,该装置的都设置了,始终拉不起,结果是后台签字不对,导致拉不起客服端。再后来过了一段时间后,拉起之后报支付注明退步,拿了一台安卓机试了两把,并从未难题,可是作者并未动过支付这一块的代码,麻蛋那就邪门了。找后台问是哪些来头,说自身那边没反常,说安卓能拉起,你拉不起应该是您的主题素材,于是乎各种的反省代码,对着官方文书档案的参数对了又对,在网络有看齐说大概是岁月戳导致的,于是对着后台这些参数timeStamp和事先能拉起的比较都是11个人,认为那是绝非难点的了.结果申明自身错了。。问同行朋友以及百度上各类找难点和对文书档案,白白地浪费了1个多小时。。

好怕自个儿不慢变老,好怕自身肾短缺猝死,好怕自身吃东西没滋味,好怕自身神经收缩睡不着,

添加URL Schemes白名单

在“Info.plist”中追加三个LSApplicationQueriesSchemes值,设置为array, 增多支付宝需求的item:
alipay
相当于图中的最终一项,其余的都是微信博客园和QQ的.

彩民之家论坛9066777 3

4ECDABF8-640E-4CF9-BBB8-C93037F155D9.png

彩民之家论坛9066777 4IMG_1838.PNG

今天可是周天啊! ~周末啊! ~周末啊! ~.........哎........

.h文件

#import <Foundation/Foundation.h>

@interface HHAliPaySDK : NSObject

/**
 根据订单信息向后台申请prepayId以调用支付宝支付接口

 @param amount  金额
 @param orderId  订单信息(支付前请求后台给的没有签名过的订单号)
 */
  (void)sendAliPayRequestWithAmount:(NSString *)amount
                            orderId:(NSString *)orderId;

/**
 openURL
 */
 (BOOL)handleOpenURL:(NSURL *)url;


@end
.m文件

彩民之家论坛9066777 5图片.png彩民之家论坛9066777 6图片.png彩民之家论坛9066777 7图片.png彩民之家论坛9066777 8图片.png

以下是官方的显示器尺寸, 原来最先的主见正是遵照荧屏的莫大812pt来推断

看一下开采宝给的流程图

图中的“商户客商端”其实就是大家的iOS客户端需求做的职业:
1.用后台给的签字后订单音讯调用支付宝支出接口
2.甩卖支付宝再次来到的支出结果
完了,那就做到了,相当粗略的事情,只必要这两步,官方文书档案给的那么一无可取的繁杂东西,什么order类啥的,皆以把后台做的政工,放在了客商端来做,所以才那么复杂.

彩民之家论坛9066777 9

{7D03662F-CC3F-AE65-ECAB-8DA5F7FF92F9}.png

动用 (且count是刚刚自定义二个承接UITextField的类)

彩民之家论坛9066777 10图片.png

下一场就就足以欢欣的写代码了

创办了四个承继于NSObject的 HHAliPaySDK工具类,小编在里边封装了弹指间向后台央求签字后的订单新闻(也等于payOrder)的法门和拍卖回调结果用到的方法.

ps:这几个类中有互联网必要,HHttpManager是本人要好对AFNetworking3.0的二回封装,感兴趣的可以看一看,不感兴趣的同学能够用AFN或许本人的互连网框架.

彩民之家论坛9066777 11图片.pngios10的键盘彩民之家论坛9066777 12图片.png注意:品种中运用IQKeyboardManager对键盘举行保管,但是对ios11犹如又不足之处,举个例子地点的三种功用。。

因为自个儿的布局是 CollectionView, 所以只要设置 iOS 11的新性情方法contentInsetAdjustmentBehavior为UIScrollViewContentInsetAdjustmentNever就足以了就那样类推,假诺是 UITableView 布局的,也是安装contentInsetAdjustmentBehavior


.h文件

彩民之家论坛9066777 13图片.png

彩民之家论坛9066777 14图片.png

开篇调侃,文书档案看不懂,文书档案看不懂,文书档案看不懂.主要的事说三遍.
对于没集成过支付宝SDK的人来讲,官方文书档案看完也是一脸懵逼,在网络搜完外人写的哪些文书档案流程,看完也是一脸懵逼.
官方demo运维不了,还应该有各样什么order类生成具名,再次回到结果验签巴拉巴拉,反正说的笔者心累.

彩民之家论坛9066777 15134E2FEFECF43EA9F2B9B8201B104D2A.png彩民之家论坛9066777 16图片.png彩民之家论坛9066777 17图片.png彩民之家论坛9066777 18图片.png彩民之家论坛9066777 19图片.png

查了材质说iOS11下,苹果对相册的权能key做了调节,原本的 NSPhotoLibraryUsageDescription ,在iOS11之后,改成了NSPhotoLibraryAddUsageDescription。

叩问以上就能够难解难分开辟宝SDK了

此地是官方开辟宝SDK集成流程
这里是创设应用获取APPID和布置秘钥的方法

2.无数据气象下显得

彩民之家论坛9066777 20IMG_1835.PNG

标题:上传后重回警告,缺点和失误1024px的Logo

彩民之家论坛9066777 21Logo缺点和失误

安装头文件路线

点击“Build Settings”选项卡,在探索框中,以重大字“search”搜索,对“Header Search Paths”扩展头文件路线:$(SRCROOT)/项目名称。假设头文件音讯已扩充,可不必再扩大.

首先自身在底层打了BaseTableViewController,使用了#import "UIScrollView EmptyDataSet.h"此框架,挺不错的一大神写的。将安装了

对于iOS11下的HUAWEIX适配下拉刷新有以下几点:

.m文件

#import "HHAliPaySDK.h"
#import <AlipaySDK/AlipaySDK.h>
@implementation HHAliPaySDK

//post请求后台,获取签名后的订单信息(也就是payOrder)
  (void)sendAliPayRequestWithAmount:(NSString *)amount
                            orderId:(NSString *)orderId{
    NSDictionary *paramDict = @{
                                @"totalAmount":amount,
                                @"orderId":orderId,
                                };
//getAliPayOrder:后台提供的接口,用来请求签名后的订单信息(也就是payOrder)
    [HHttpManager POST:getAliPayOrder parameters:paramDict success:^(id responseObject) {
        NSNumber *state = responseObject[@"state"];
        if (state.integerValue == 0) {
            NSString *orderStr = responseObject[@"data"][0][@"AlipaySign"];
            [self sendPayRequstWithPayOrder:orderStr];
        }else{
            NSLog(@"请求失败--%@",responseObject[@"msg"]);
        }
    } failure:^(NSError * error) {
        NSLog(@"请求失败--%@",error);

    }];
}


//调用支付宝支付(无支付宝客户端时的结果回调也在此方法中)
  (void)sendPayRequstWithPayOrder:(NSString *)payOrder{
    NSLog(@"%@", payOrder);
//AliPay_Scheme:设置URL Scheme时让你记住的参数.
    [[AlipaySDK defaultService] payOrder:payOrder fromScheme:AliPay_Scheme callback:^(NSDictionary *resultDic) {
        NSLog(@"%@", resultDic);
        [self handleAliPayCallBackResultWithDictionary:resultDic];

    }];
}

/**
 openURL(有支付宝客户端时返回的结果)
 */
 (BOOL)handleOpenURL:(NSURL *)url{
    if ([url.host isEqualToString:@"safepay"] ) {
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            [self handleAliPayCallBackResultWithDictionary:resultDic];
        }];
    }

    if ([url.host isEqualToString:@"platformapi"]){
        [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
            [self handleAliPayCallBackResultWithDictionary:resultDic];
        }];
    }
    return YES;
}


  (void)handleAliPayCallBackResultWithDictionary:(NSDictionary *)resultDic{
    if ([resultDic[@"resultStatus"] isEqual:@"9000"])
    {
        //客户端支付成功,然后向后台请求,看他是否验签成功,他也成功了,才证明支付成功,
    }

    if ([resultDic[@"resultStatus"] isEqual:@"4000"])
    {
        //支付失败
    }

    if ([resultDic[@"resultStatus"] isEqual:@"6001"])
    {
        //取消支付
    }

    if ([resultDic[@"resultStatus"] isEqual:@"6002"])
    {
        //网络连接失败
    }

}
@end

出于在输入数量的时候必要监听输入数字以及点击时收起键盘ios 11的键盘

可是,自定义的 MANavigationController里所重写的UIBarButtonItem重临按钮icon 被拉宽,况兼各分界面导航栏UIBarButtonItem开关, 也一模一样挤压和错位,设置的 title 也看不到了.

增多信赖库

把下载的SDK中AlipaySDK.bundle和阿里paySDK.framework拖入工程,然后按法定给的图增添信赖库.官方文书档案看到那张图这里就够了,别的以下的决不管,都是教你demo怎么运作,签名和验签也没我们顾客端的事,看她demo干嘛.

彩民之家论坛9066777 22

{6F9683DA-F3FC-EB1C-9F34-C2D3EA014542}.png

 self.count.finishCallBack = ^() {//做相应操作。。。//收键盘 [[[UIApplication sharedApplication] keyWindow] endEditing:YES]; }; 
 //针对 iOS11适配改写 的关键性代码, 就这么几行,完全搞定了 UIView *containVew = [[UIView alloc] initWithFrame:btn.bounds]; [containVew addSubview:btn]; return [[UIBarButtonItem alloc]initWithCustomView:containVew];

 以下代码摘自 MISSAJJ 写的MAButtonTool工具类,为了节约时间,提高创建按钮控件的效率,特抽出一个创建各种按钮的类方法 支持: 1,图片按钮 (默认居中按钮,左返回按钮,右分享按钮) 2,自定义文字图片靠左靠右按钮 3,按项目需求,设定了按钮样式和位置样式 4,只要修改一下分享和返回按钮图片就可以直接应用到项目中了 5,由于美工给的图片素材尺寸会不同,所以按钮的frame和setImageEdgeInsets可根据项目素材情况在VC层创建后重写调整 6,支持block调用按钮事件 使用方法请看:https://github.com/MISSAJJ/MAButtonTool^_^ 我只要在这个工具类里针对 iOS 11增加几行包装代码,就解决了全部项目在 iOS 11下导航栏按钮错位问题, 这就是包装工具类的好处......#pragma mark ==[自定义 block 导航栏 按钮]== (UIBarButtonItem *)createButtonWithImage:(NSString * __nullable)imageStr position:(MAButtonToolPostion)position type:(MAButtonToolType)type actionBlock:(ButtonItemBlock)block{ UIButton* btn; if (position == MAButtonToolPostionLeft) { //位置靠左 if (type ==MAButtonToolTypeBack) { //返回按钮 btn = [self createLeftBackButton]; }else{ btn = [self createLeftButton:imageStr]; //默认靠左按钮 } }else if (position == MAButtonToolPostionRight) { //位置靠右 if (type ==MAButtonToolTypeShare) { //分享按钮 btn = [self createRightShareButton]; }else{ btn = [self createRightButton:imageStr];//默认考右按钮 } }else { //位置中间 btn = [self createButton:imageStr]; } [btn addTouchAction:^(UIButton *btn) { if  { block; } }]; //针对 iOS11适配改写 UIView *containVew = [[UIView alloc] initWithFrame:btn.bounds]; [containVew addSubview:btn]; return [[UIBarButtonItem alloc]initWithCustomView:containVew];}#pragma mark ==[左自定义图片按钮]==  (UIButton *)createLeftButton:(NSString *)imageStr{ UIButton* btn= [self createButton:imageStr]; [btn setImageEdgeInsets:UIEdgeInsetsMake(0, -10, 0, 10)]; return btn;}#pragma mark ==[右自定义图片按钮]==  (UIButton*)createRightButton:(NSString*)imageStr{ UIButton* btn=[self createButton:imageStr]; [btn setImageEdgeInsets:UIEdgeInsetsMake(0, 10, 0, -10)]; return btn; }#pragma mark ==[左返回按钮]==  (UIButton*)createLeftBackButton{ UIButton* btn= [self createButton:@"backarrow_white"]; btn.frame = CGRectMake(0, 0, 50, 50); [btn setImageEdgeInsets:UIEdgeInsetsMake(0, -20, 0, 20)]; return btn;}#pragma mark ==[右分享按钮]==  (UIButton*)createRightShareButton{ UIButton* btn= [self createButton:@"share_white"]; btn.frame = CGRectMake(0, 0, 35, 35); [btn setImageEdgeInsets:UIEdgeInsetsMake(0, 10, 0, -10)]; return btn;}

设置https访问

在“Info.plist”中加进三个App Transport Security Settings值, 当中有多少个Allow Arbitrary Loads对应的值要设置为YES

彩民之家论坛9066777 23

39DD2532-0055-4AC0-AC11-920D6A18E179.png

3.使用

彩民之家论坛9066777 24图片.png

针对于此测量检验了须臾间应用,果然毫无悬念, 立刻去 info.plist 把 key 改成NSPhotoLibraryAddUsageDescription, 非常的慢化解难点了.

那正是说为何官方demo中能放在顾客端做的事情(具名,验签)要给后台来做.

看下边官方给的唤醒:

彩民之家论坛9066777 25

{ABDC1148-DE4D-8D69-61BD-E3B6741D5818}.png

率先条:私钥要封存在服务端,那么决定了调用支付宝接口须要的签订公约后的订单音信(也等于参数payOrder)须求后台来扭转,传给大家.
第二条:到底付款成没得逞,需求依赖服务端收到的异步文告结果来开展判定,我们客商端那边接受成功的晋升也没用,必得后台告诉我们,他们也成功了,才算成功
其三条:谈起了难住大多数人的验签,官方建议验签法则参照他事他说加以考察异步通告验签,而异步通告验签,是在服务端来成功的,官方在服务端的SDK中提供了两个工具类用来验签,所以我们也是在服务端完结的.


自定义一个承袭UIText菲尔德,在.h文件之中增多block回调

难题陈诉:

1.断网气象下显得

彩民之家论坛9066777 261

  • 图1: 主分界面最上部左右3个开关被拉伸[图表加载中,请耐心等待....]

    彩民之家论坛9066777 27IMG_4897.PNG

  • 图2: 顶端导航栏中间的 title 消失, 3个开关错位和被拉伸[图表加载中,请耐心等待....]

 _tableView.emptyDataSetSource = self; _tableView.emptyDataSetDelegate = self; self.succeedEmptyStr =@"当前暂无内容~"; self.succeedEmptyImage = [UIImage imageNamed:@"mine_background"];

熬夜完结了商家的2个利用的 iOS 11适配之后, 今儿晚上始发适配本人的片段门类,张开当中一个门类在差异的模拟器下各自编写翻译看成效, 尾巴部分自定义 tabbar 显示未有反常态, 但最上部是潜伏了 NavigationBar并接纳了MJRefresh下拉刷新,开采有错位..

iOS11下的OPPOX的导航栏为中度44,状态栏中度也调动为44,所以总体最上部状态栏的冲天和导航栏的万丈一齐是88,所以在自定义导航栏里针对 小米 X 修改的中度

可昨夜立异到 Xcode9后编写翻译代码,开掘还会有一对主题材料的, 因为与此同有时间管理了少数个应用,别的应用也是内需共同作 iOS 11适配, 所以好记不及赖笔头, 省得适配其余应用的时候忘记.....

彩民之家论坛9066777 28IMG_4899.PNG

任何方式:

网络里也可能有相关这种重写layoutSubviews的格局,笔者试过之后开采导航栏变透明,而且颜色奇异了, 所以最终如故用了上边的法子化解了难点, 上面包车型地铁这种办法我们也可是尝试一下

自定义的navigationBar,在iOS11上运行就可能出现布局错乱的bug,解决办法是重写UINavigationBar的layoutSubviews方法调整布局:- layoutSubviews { [super layoutSubviews]; //注意导航栏及状态栏高度适配 self.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), MANavBarHeight); for (UIView *view in self.subviews) { if([NSStringFromClass([view class]) containsString:@"Background"]) { view.frame = self.bounds; } else if ([NSStringFromClass([view class]) containsString:@"ContentView"]) { CGRect frame = view.frame; frame.origin.y = statusBarHeight; frame.size.height = self.bounds.size.height - frame.origin.y; view.frame = frame; } }}

彩民之家论坛9066777 29图片.png

彩民之家论坛9066777 30荧屏快照2017-09-24 02.23.18.png

注:首先那么些下拉刷新的偏移量并不是MJRefresh变成的,不过真的要求适配,比如通栏ViewController呈现的时候,刘海会遮住下拉刷新的组件,消除办法是对下拉刷新控件自定义,调节之中组件的布局,通栏的ViewController地方使用自定义的下拉控件。

图3: info.plist内设置NSPhotoLibraryAddUsageDescription权限[图形加载中,请耐心等待....]

彩民之家论坛9066777 31MISSAJJ Projects

案由和平消除决: 进级Xcode9后Assets/AppIcon下多了贰个1024pt的icon框,须要补上缺失的Logo

彩民之家论坛9066777 321024pt图标

图7: 界面上滑展现导航栏的效应

彩民之家论坛9066777 33显示屏快速照相2017-09-24 01.58.03.png

解决办法: 将你自定义的键盘的customEmojiBoardView 的莫斯中国科学技术大学学加上34就足以了
//自定义表情键盘的宽高 CGFloat viewWidth = [UIScreen mainScreen].bounds.size.width - 16;//原本自定义的高度是 216, 那就判定 iPhone X 下高度 再加上 34 为: 216 34 ; CGFloat viewHeight = isPhoneX ? 250 : 216;//自定义表情键盘customEmojiBoardView 的初始化 - (instancetype)init { self = [super initWithFrame:CGRectMake(0, 0,viewWidth, viewHeight)]; if  { 以下代码省略...... } return self; }

Contact 联系方式:希望能有越多的非洲狮一齐共勉斟酌学习,兴奋奔跑!联系方式: QQ 996174446 [验证:iOS 程序员]MISSAJJ网址 : : : 斯威夫特 和 Objective-C )iOS 开采项目电子书

图4: iOS 11下拉刷新出现错位难点[图形加载中,请耐心等待....]

彩民之家论坛9066777 342D3256F9-45E2-412C-B4AF-E66EB262E4B6.png

小米 X 的私下认可系统键盘 : 尾巴部分会自动抬高中度

彩民之家论坛9066777 35暗中同意系统键盘尾巴部分会自动抬高高度

1,首先请配置相应的开发银行图,尺寸是1125*2436;2,对于通栏ViewController中的UIScrollView,系统会默许遵照contentInsetAdjustmentBehavior属性改动其bounds的y值为-44,导致UIScrollView中的全部子控件下移,解决办法是,对于通栏ViewController,请设置其UIScrollView的contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever。

彩民之家论坛9066777 36图片.png

标题: 自定义的神情键盘的平底在 Samsung X 下没有扩充中度

彩民之家论坛9066777 37自定义的键盘底部非常矮

辛亏铺子的多少个使用的导航栏设计并不复杂, 无需自定义 titleView,所以不关乎到自定义导航titleView的小幅适配难点.

图6: 适配后的下拉刷新,相同的时候遮蔽导航栏的截图

  • 图1: 导航栏左右3个开关展现符合规律, 中间的标题也出示寻常了[图表加载中,请耐心等待....]

    彩民之家论坛9066777 38IMG_4901.PNG

  • 图2: 主分界面最上端左右3个按键显示符合规律了[图表加载中,请耐心等待....]

    彩民之家论坛9066777 39IMG_4901.PNG

将自定义表情emojiToolBarView设置为 UITextView输入框的inputAccessoryView,emojiToolBarView会置顶于系统键盘,而且跟随系统键盘向上向下活动
self.customTextView.inputAccessoryView = self.emojiToolBarView;

彩民之家论坛9066777 40将自定义表情toolBar 传给 UITextView的inputAccessoryView

//点击自定义表情按钮事件的逻辑- emotionBtnClicked:sender { UIButton *button = sender; if (!isEmotionShow) { [button setImage:[UIImage imageNamed:@"board_system"] forState:UIControlStateNormal]; isEmotionShow = YES; isKeyboard = NO; // self.customEmojiBoardView为自定义表情键盘 View self.customTextView.inputView = self.customEmojiBoardView; [self.customTextView resignFirstResponder]; }else{ [button setImage:[UIImage imageNamed:@"board_emoji"] forState:UIControlStateNormal]; isEmotionShow = NO; isKeyboard = YES; self.customTextView.inputView = nil; [self.customTextView resignFirstResponder]; }}

彩民之家论坛9066777 41扩充中度后的自定义表情键盘

自个儿的消除办法:小编抱有的项目都是选用了宏定义参数的措施来设置各个控件的, 所以只要改写那一个相关宏定义参数, 整个项目都一齐做好了适配, 所以平常的积淀和回顾思维很注重,关键时刻可以缓慢化解相当多不供给的双重专门的学业量.

if (@available(iOS 11.0, *)) {}else{}

if (@available(iOS 11.0, *)) { _collectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; } else { // Fallback on earlier versions }

#define isIPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? [[UIScreen mainScreen] currentMode].size.height==2436 : NO)

1,iOS11下的NokiaX的导航栏为中度44,状态栏中度也调治为44,所以一切最上端状态栏的冲天和导航栏的冲天一起是88,自定义导航栏的同桌须求基于系统机型调整导航栏高度;2,iOS11下的红米X的tabBar的莫斯科大学调解为83,自定义tabBar的同室提议使用Frame布局;3,iOS11下的魅族X下,显示器底边私下认可显示了长条状的Home键提醒器,能够经过UIViewController (UIHomeIndicatorAutoHidden)分类中的prefersHomeIndicatorAutoHidden来掩藏,可是官方并不建议如此做。

彩民之家论坛9066777 42荧屏快照2017-09-24 01.57.32.png

图5: 适配后的截图[图表加载中,请耐心等待....]

其余适配点:

最简易的技术方案: 将 UIbutton 包装到 UIview 内, 再经过initWithCustomView方法传递给UIBarButtonItem

那八个星期大约每一天都只睡了多少个钟头,

昨夜熬到午夜3点,适配公布好了[AR 扫描器]应用软件应用,已经付出检查核对,今夜适配其余贰个[乐游博物馆]应用程式 应用, 不识不知又一度深夜1:00了,

今日七月14日,手提式有线电话机更新到iOS 11, 看了一下最先上架 App Store 的使用, 啥难题都尚未, 心御史自得其乐也松了一口气......

版权声明:本文由彩民之家高手论坛发布于编程技术,转载请注明出处:【MISSAJJ原创-iOS】 Xcode9~iOS 11和iPhone X 适配问题集