xcode怎么模拟ios11系统(还在为iOS11跟Xcode9的适配发愁?戳进
Xcode无权设置中文。还在担心iOS11和Xcode9之间的适配?戳进去。那里 这是你想看的东西!
看着网上铺天盖地的iOS11新闻,作为iOS从业者谁会无动于衷?带着这个好奇心,我把macOS升级到了10.12.4(Xcode9需要10.12.4及以上版本),下载安装了Xcode9.0 Beta。
这是我的一个iOS交流群659170228,不管小白还是老司机,都欢迎入驻,大家一起交流成长!
单从这几天的体验来看,Xcode9不愧为大作,代码预览和编译速度都有了很大的提升。最吸引眼球的是Xcode9将版本管理系统分离成了一个模块,并支持同一个局域网下的无线部署和调试。说实话,我真的不喜欢。我不希望削减到Xcode8开发,如果我 我不担心在线项目的问题。
Xcode9下相册等访问权限问题
在之前的项目中,相机功能一直使用系统自带的PickerView。说实话,不是很好看。业余时间一直在开发定制相机(EVNCamera:给个StarO(_)O~)。在Xcode9之一个测试版开发相机功能的时候,发现原来的项目居然是crash。后来发现在iOS11下,苹果调整了相册的权限键。iOS11之后,原来的NSPhotoLibraryUsageDescription改为NphotolibraryAdusagedscription。
有关详细信息,请参见可可键。
,有些孩子 s鞋反馈使用Xcode 9 Beta3打包应用,使用原相册权限NSPhotoLibraryUsageDescription依然正常,我尝试在Xcode 9 Beta4中打包,使用原相册权限键依然死机。
近场通讯NFC权限
在iOS11中,苹果开放了NFC(近场通信),这大概也是推广ApplePay的策略。
使用近场通信时,在.plist中配置NFCReaderUsageDescription权限,案例步骤如下
iOS 11核心NFC -有样本代码吗?
iOS11需要适配的地方
(CGFloat)tableView:(UITableView )tableView heightForHeaderInSection:(NSInteger)section 不执行
默认情况下,一UITableView:自动调整大小是打开的,这可能意味着我们不再需要自己计算单元格的高度。只要我们设置这两个属性并约束布局,系统就会自动计算出单元格的高度。iOS11之后,默认开启自调整大小,包括页眉页脚。如果在项目中不使用estimatedRowHeight属性,那么在iOS11下会出现奇怪的现象,因为在iOS11之前,estimatedRowHeight默认为0,自动打开Self-Sizing后,contentSize和contentOffset都可能发生变化。您可以通过以下方式禁用它
self . table view . estimatedrowheight=0;
self . table view . estimatedsectionheaderheight=0;
self . table view . estimatedsectionfooterheight=0;
自动yadjustscrollviewinserts被放弃,TabView,CollectionView间距问题
解决方案
自动调整scrollviewinserts属性不再使用,我们需要使用UIScrollView南
contentInsetAdjustmentBehavior
归功于替代吧。设置适当的枚举.
一个
2
三
四
五
六
if(@available(iOS11.0,){
self . table view . contentisetadjustmentbehavior=uiscrollviewcontentisetadjustmentnever;
}
否则{
self . automatically adjustsscrollviewinsets=NO;
}
NSLocationAlwaysAndWhenInUseUsageDeion
在iOS11中,原来的NSLocationAlwaysUsageDeion被降级为NSLocationWhenInUseUsageDeion。,在原始项目中使用了requestAlwaysAuthorization。
获取定位权限,而未在plist文件中配置NSLocationAlwaysAndWhenInUseUsageDeion,系统框不会弹出。iPhone X状态栏图标元素结构变了
我们之前通过遍历foregroundView,UIStatusBarDataNetworkItemView可以找到wifi信号强度。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-(void)getSignalStrength{
UIApplicationapp=[UIApplicationsharedApplication]
NSArraysubviews=[[[app valueForKey:@\"statusBar\"] valueForKey:@\"foregroundView\"] subviews]
NSStringdataNetworkItemView=nil
for(idsubview insubviews){
if([subview isKindOfClass:[NSClassFromString(@\"UIStatusBarDataNetworkItemView\")class]]){
dataNetworkItemView=subview
break
}
}
intsignalStrength=[[dataNetworkItemView valueForKey:@\"_wifiStrengthBars\"] intValue]
NSLog(@\"signal %d\",signalStrength)
}
由于iPhoneX的留海设计,所以元素与布局都发现了变化。
1
idstatusBar=[[UIApplicationsharedApplication] valueForKeyPath:@\"statusBar\"]
断点后执行
1
po[statusBar recursiveDescription]
即可查看新的结构
二navigation bar
1、导航栏新增了一种大标题样式,默认设置是不开启,所以不需要修改。
2、titleView支持autolayout,这要求titleView必须是能够自撑开的或实现了- intrinsicContentSize
解决方案
1
2
3
-(CGSize)intrinsicContentSize{
returnUILayoutFittingExpandedSize
}
三ScrollView
如果有一些文本位于UI滚动视图的内部,并包含在导航控制器中,现在一般navigationContollers会传入一个contentInset给其最顶层的viewController的scrollView,在iOS11中进行了一个很大的改变,不再通过scrollView的contentInset属性了,而是新增了一个属性adjustedContentInset,通过下面两种图的对比,能够表示adjustContentInset表示的区域
新增的contentInsetAdjustmentBehavior属性用来配置adjustedContentInset的行为,该结构体有以下几种类型
typedef NS_ENUM(NSInteger, UIScrollViewContentInsetAdjustmentBehavior) {
UIScrollViewContentInsetAdjustmentAutomatic,
UIScrollViewContentInsetAdjustmentScrollableAxes,
UIScrollViewContentInsetAdjustmentNever,
UIScrollViewContentInsetAdjustmentAlways,
}
@property(nonatomic) UIScrollViewContentInsetAdjustmentBehavior contentInsetAdjustmentBehavior
@property(nonatomic, readonly) UIEdgeInsets adjustedContentInset;
//adjustedContentInset值被改变的delegate
- (void)adjustedContentInsetDidChange
- (void)scrollViewDidChangeAdjustedContentInset:(UIScrollView )scrollView
UIScrollViewContentInsetAdjustmentBehavior 是一个枚举类型,值有以下几种:
automatic 和scrollableAxes一样,scrollView会自动计算和适应顶部和底部的内边距并且在scrollView 不可滚动时,也会设置内边距.
scrollableAxes 自动计算内边距.
never不计算内边距
always 根据safeAreaInsets 计算内边距
各位看管如果觉得写的还可以可以点一波关注跟收藏!
xcode9怎么安装ios11 xcode9和ios11哪个好