`
咖啡动力
  • 浏览: 443193 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

ios 新特性

 
阅读更多
转载地址:http://justsee.iteye.com/blog/1945674
大笑ios7新增加的icon尺寸:

76 x 76:Size for iPad 2 and iPad mini (standard resolution)

120 x 120 :Size for iPhone  and iPod touch (high resolution)

152 x 152: Size for iPad and iPad mini (high resolution)

参考:

http://blog.manbolo.com/2013/08/15/new-metrics-for-ios-7-app-icons

https://developer.apple.com/library/ios/documentation/userexperience/conceptual/mobilehig/IconMatrix.html



大笑Launch image

原来做ios5,6的启动画面时,如果有status bar,我们会考虑做一张高度少20point的图片,现在ios7的status bar透明了,所以Launch image需要做成全屏尺寸。



大笑在xcode5中同时预览ios7和ios7以前的ui样式:

1、打开需要预览的xib;

2、打开assistant editor;

3、点击Manual选择Pre view







大笑

判断ios7:
C代码  收藏代码

    #define NLSystemVersionGreaterOrEqualThan(version) ([[[UIDevice currentDevice] systemVersion] floatValue] >= version) 
    #define IOS7_OR_LATER NLSystemVersionGreaterOrEqualThan(7.0) 
     
    #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1 
            if (IOS7_OR_LATER) { 
               //适配7的代码,这里是在sdk7,ios7中代码 
            } 
    #endif 
    //xcode4.6  支持run ios7 

ps:一个不错的宏:
Java代码  收藏代码

    #ifndef kCFCoreFoundationVersionNumber_iOS_6_1 
    #define kCFCoreFoundationVersionNumber_iOS_6_1 793.00 
    #endif 
     
    #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1 
    #define IF_IOS7_OR_GREATER(...) \ 
    if (kCFCoreFoundationVersionNumber > kCFCoreFoundationVersionNumber_iOS_6_1) \ 
    { \ 
    __VA_ARGS__ \ 
    } 
    #else 
    #define IF_IOS7_OR_GREATER(...)  
    #endif 



判断SDK7:


Java代码  收藏代码

    //前提至少运行在xcode4.6有sdk6.1      
      #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1 
           //.......... 
           #endif 

判断运行时方法:



- (BOOL)respondsToSelector:(SEL)aSelector;

例如:
Java代码  收藏代码

    if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) 
    { 
        self.edgesForExtendedLayout = UIRectEdgeNone; 
    } 



大笑ios7中UITableView的cell separator默认不是从最左边开始

下面兼容低于ios7的版本:
Java代码  收藏代码

    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 
            if (IOS7_OR_LATER) { 
                [tabelView setSeparatorInset:UIEdgeInsetsZero];// 
            } 
    #endif 



大笑我这是自定义的xib的cell:本来是透明的uitableview背景,到ios7变成白色(因为背景是白色):
Java代码  收藏代码

    增加: 
     cell.backgroundColor = [UIColor clearColor];//我是由于这层挡住了,大家注意下每一层颜色 

在之前的版本中UITableViewCell的backgroundColor是透明背景的,但是在iOS7中是默认白色背景,如果在TableView后面加入背景的应用要注意了,在创建UITableViewCell的时候把backgroundColor设置为[UIColor clearColor]



大笑UILabel不一致的background

对于UILabel,在iOS 7中它的background颜色默认是clearColor,而在iOS 6中默认的是白色。所以,我们最好在代码中对label的background颜色进行明确的设置:
Java代码  收藏代码

    view.backgroundColor = [UIColor clearColor]; 



大笑我这是自定义的xib的cell:用xib自定义的cell上的按钮不能响应点击事件,一种是把按钮放到cell的contentView上,或者是设置[cell.contentView setUserInteractionEnabled: NO];来屏蔽cell上的点击事件



大笑

如果你最近在做对iOS7的兼容时,发现你的table view cell显示不正常。这很可能是你以前的用法不对。Table view cell的自定义内容应该作为 cell.contentView的子view添加到cell中,如果你直接用 [cell addSubView:]方法而不是[cell.contentView addSubView:]方法添加子元素,那么就可能在iOS7下出来异常的表现。主要原因是iOS7的Table view cell内部实现有了部分变化。
Java代码  收藏代码

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
     
    { 
     
    UITableViewCell * cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:@"cellIdentifier"]; 
     
    UIView * subview = [[XXView alloc] init]; 
     
    subview.userInteractionEnabled = NO;// 不设为NO会屏蔽cell的点击事件 
     
    subview.backgroundColor = [UIColor clearColor];// 设为透明从而使得cell.backgroundColor有效. 
     
    subview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
     
    [cell.contentView addSubview:subview];// cell.contentView是个readonly属性,所以别想着替换contentView了. 
     
    return cell; 
     
    } 





大笑在ios5,ios6中正常执行的动画,但到ios7中不定时的会消失。

解决方案:在可能消失的地方加上“[UIView setAnimationsEnabled:YES]”,比如action方法,viewWillappear方法等。

网上暂时还没有与这个有关的问题,与这个类似:http://stackoverflow.com/questions/18880584/ios-7-animation-block-not-being-called



大笑

视图控制器接口wantsFullScreenLayout已作废。如果你像以前那样地指定wantsFullScreenLayout = NO,iOS 7中视图控制器会在将其内容显示到一个意外的屏幕位置。



大笑NSString 绘制

ios7 下使用

- (void)drawAtPoint:(CGPoint)point withAttributes:(NSDictionary *)attrs

进行绘制,需要定义attributes,对样式进行定义。

例如attributes是@{NSFontAttributeName:[UIFontsystemFontOfSize:8], NSStrokeColorAttributeName:[[UIColorgreenColor] colorWithAlphaComponent:0.5]},但这个属性会影响上下文。

ios7 之前使用

- (CGSize)drawAtPoint:(CGPoint)point withFont:(UIFont *)font  绘制。



大笑navigation controller容器中布局到ios7中往上偏移了64px

iOS6中默认的布局将从navigation bar的底部开始,但到了iOS7中默认布局从navigation bar的顶部开始,这就是为什么所有的UI元素都往上漂移了。因为在iOS7中,苹果引入了一个新的属性,叫做[UIViewController setEdgesForExtendedLayout:],它的默认值为UIRectEdgeAll,使用edgesForExtendedLayout指定视图的哪条边需要扩展,不用理会操作栏的透明度。所以这种情况快速修复的方法是:在-(void)viewDidLoad中添加如下一行代码:
Java代码  收藏代码

    self.edgesForExtendedLayout = UIRectEdgeNone; 



大笑extendedLayoutIncludesOpaqueBars

关于这个属性的测试版本中默认值是YES,正式版本是NO!

如果你使用了不透明的navigation bar,设置edgesForExtendedLayout 还是默认值UIRectEdgeAll,你又想整个view全屏(navigation bar下面的内容网上漂移64px) extendedLayoutIncludesOpaqueBars 的值设置为YES。

例如:
Java代码  收藏代码

    在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中给uinavigationbar设置背景图片使之不透明: 
        CGSize imageSize = CGSizeMake(1, 1); 
        UIGraphicsBeginImageContextWithOptions(imageSize, YES, 0); 
        [[UIColor greenColor] set]; 
        UIBezierPath * path = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, imageSize.width, imageSize.height)]; 
        [path fill]; 
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext (); 
        UIGraphicsEndImageContext(); 
         
        [[UINavigationBar appearance] setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; 

然后在需要全屏的UIViewController中设置:
Java代码  收藏代码

    self.extendedLayoutIncludesOpaqueBars = YES; 



大笑隐藏状态条

原来在ios6中是:
Java代码  收藏代码

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 
        // Override point for customization after application launch. 
        [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
        return YES; 
    } 

现在在ios7中无效了。



快速解决:

在项目plist文件中修改为:

View controller-based status bar appearance 的值为NO。



但是我认为这个快速解决是没有按照苹果的思路来解决的,而且会有些问题,比如,当你在某个界面隐藏了status bar,退回到上一个界面时,status bar仍然是隐藏的。 首先,苹果把View controller-based status bar appearance默认的值设为YES,是有他的道理的,新系统下,苹果希望我们的viewcontroller去控制status bar,也就是说,我们大多数的界面应该是统一的,偶尔一些viewcontroller需要status bar特殊控制的,完全交给当前的viewcontroller来做。那么推荐解决方案:

保持View controller-based status bar appearance 的默认值为YES,然后在ViewController中重写prefersStatusBarHidden方法:


Java代码  收藏代码

    - (BOOL)prefersStatusBarHidden 
    { 
        return YES; 
    } 

大笑
升级到ios7 ,默认状态栏是透明的,就是状态栏只有文字没有背景。现在的情况是,默认是会叠合的,开发需要从20px像素以下开始布局页面元素才能避免。




大笑 状态栏样式修改:

在在UIViewController或子类中实现以下两个方法:
Java代码  收藏代码

    - (BOOL)prefersStatusBarHidden 
    { 
        return YES; 
    } 
    - (UIStatusBarStyle)preferredStatusBarStyle{ 
        return UIStatusBarStyleLightContent; 
    } 

在需要刷新状态栏样式的时候,调用
Java代码  收藏代码

    - (void)setNeedsStatusBarAppearanceUpdate  






大笑在iOS7 UINavigationController中侧滑手势返回

假如你自定义leftBarButtonItem,返回手势会失效,需要实现:
Java代码  收藏代码

    self.navigationController.interactivePopGestureRecognizer.delegate = self; 

假如你没有自定义leftBarButtonItem或其他需求而不需要手势,必须实现:


Java代码  收藏代码

    self.navigationController.interactivePopGestureRecognizer.enabled = NO; 



大笑

在iOS 6 中,tintColor 可以用来给导航栏的背景着色、tab 栏、工具栏、搜索栏、搜索栏的 范围选择栏着色。而在iOS 7 中,给背景着色只需要使用barTintColor 属性就可以了,所以iOS7中barTintColor 取代原有的 tintColor, 原有的tintColor只修改对应bar上的按钮颜色。



大笑Navigation Bar





也就是说如果设置Navigation Bar的图片,并且这个图片高度保持在44point(88px),那么IOS5,6,7的效果是一致的。

参考:https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TransitionGuide/Bars.html#//apple_ref/doc/uid/TP40013174-CH8-SW1



大笑 UIBarButtonItem

在iOS7中自定义的 UIBarButtonItem 所有的item向中间偏移了,如果需要适配ios6的风格需要修改

简单处理:


Java代码  收藏代码

    UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc] 
                                           initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace 
                                      target:nil action:nil]; 
    negativeSpacer.width = -16;// it was -6 in iOS 6 
    [self.navigationItem setLeftBarButtonItems:[NSArray arrayWithObjects:negativeSpacer, requriedButton/*this will be the button which u actually need*/, nil] animated:NO]; 

如果想不修改源代码,例如setLeftBarButtonItem等方法,可以在category中覆盖:
Java代码  收藏代码

    #import "UINavigationItem+PtHelper.h" 
     
    @implementation UINavigationItem (PtHelper) 
     
    #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1 
    - (void)setLeftBarButtonItem:(UIBarButtonItem *)_leftBarButtonItem 
    { 
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) 
        { 
            UIBarButtonItem *negativeSeperator = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 
            negativeSeperator.width = -16; 
             
            if (_leftBarButtonItem) 
            { 
                [self setLeftBarButtonItems:@[negativeSeperator, _leftBarButtonItem]]; 
            } 
            else 
            { 
                [self setLeftBarButtonItems:@[negativeSeperator]]; 
            } 
            [negativeSeperator release]; 
        } 
        else 
        { 
            [self setLeftBarButtonItem:_leftBarButtonItem animated:NO]; 
        } 
    } 
     
    - (void)setRightBarButtonItem:(UIBarButtonItem *)_rightBarButtonItem 
    { 
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) 
        { 
            UIBarButtonItem *negativeSeperator = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 
            negativeSeperator.width = -10; 
             
            if (_rightBarButtonItem) 
            { 
                [self setRightBarButtonItems:@[negativeSeperator, _rightBarButtonItem]]; 
            } 
            else 
            { 
                [self setRightBarButtonItems:@[negativeSeperator]]; 
            } 
            [negativeSeperator release]; 
        } 
        else 
        { 
            [self setRightBarButtonItem:_rightBarButtonItem animated:NO]; 
        } 
    } 
     
    #endif 
      
    @end 



大笑



- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode  在ios7中过期



在ios7中使用:



- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context

例如:
C代码  收藏代码

    CGSize size = CGSizeMake(screenSize.width - self.horizontalMargin * 4.f, 1000.f); 
           if(IOS7_OR_LATER){ 
               CGRect textRect = [text boundingRectWithSize:size options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:@{NSFontAttributeName:font} context:nil]; 
               self.contentWidth = self.contentWidth!=0.f?self.contentWidth:textRect.size.width; 
               self.contentHeight = self.contentHeight!=0.f?self.contentHeight:textRect.size.height; 
           }else{ 
               CGSize  textSize = [text sizeWithFont:font constrainedToSize:size lineBreakMode:UILineBreakModeWordWrap]; 
               self.contentWidth = self.contentWidth!=0.f?self.contentWidth:textSize.width; 
               self.contentHeight = self.contentHeight!=0.f?self.contentHeight:textSize.height; 
           } 

https://developer.apple.com/library/ios/documentation/UIKit/Reference/NSString_UIKit_Additions/Reference/Reference.html#//apple_ref/occ/instm/NSString/boundingRectWithSize:options:attributes:context:



大笑

ios7新增的属性sectionIndexBackgroundColor,在索引没有被触摸时默认是白色。

        if (IS_IOS_7) { 
            self.playersTableView.sectionIndexBackgroundColor = [UIColor clearColor]; 
    //        self.playersTableView.sectionIndexTrackingBackgroundColor = [UIColor clearColor]; 
        } 



大笑在ios7 ipad中tabbar高度不是49

In iOS 7, a tab bar on iPad has a height of 56 points.



#ifndef kCFCoreFoundationVersionNumber_iOS_6_1
#define kCFCoreFoundationVersionNumber_iOS_6_1 793.00
#endif

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1
#define IF_IOS7_OR_GREATER(...) \
if (kCFCoreFoundationVersionNumber > kCFCoreFoundationVersionNumber_iOS_6_1) \
{ \
__VA_ARGS__ \
}
#else
#define IF_IOS7_OR_GREATER(...)
#endif
分享到:
评论

相关推荐

    ios-新特性引导页.zip

    YSNewFeature文件夹:控件所在位置,使用时直接拖入工程即可。 使用方法,异常简单(代码过于简单,不再做解释): 修改:Appdelegate的didFinishLaunchingWithOptions方法: func application(_ application: ...

    iOS设备清单和各个iOS设备特性

    iOS设备清单和各个iOS设备特性,从里面可以看出哪些设备支持蓝牙4.2,哪些支持蓝牙5.0,以及其他特性

    iOS 14新特性与适配要点

    在iOS 14中,Apple引入了许多新特性,这些特性为开发者提供了更多创新和改进用户体验的机会。以下是一些关键的iOS 14新特性及Swift中的适配要点: 1. **Widget**: iOS 14引入了小部件,允许开发者创建自定义的、可...

    开发者所需要知道的 iOS 10 SDK 新特性(苹果ios开发新特性)

    ### 开发者所需掌握的iOS 10 SDK新特性详解 #### 一、概述 自从2007年iPhone首次亮相以来,iOS的发展历程可谓是一段飞速前进的历史。每一代iOS系统的推出都伴随着一系列令人瞩目的创新和技术突破。进入iOS 10时代...

    iOS 各版本新特性持续更新.html

    本文档用于下一版本 iOS 更新时,跟踪完善相关博文:http://blog.csdn.net/opengl_es/article/details/50177553 当该大版本有下一大版本产生即 iOS10,那么新建文档再更新

    ios系统式体验苹果风格ppt模板.rar

    在使用这个模板时,你可以根据自己的需求添加内容,比如介绍iOS新特性、展示应用程序的功能、分析苹果产品的市场策略等。文件名称列表中的"51pptmoban.com"可能是指提供模板下载的网站,你可以在那里找到更多类似的...

    110.iOS10新特性适配教程XCode8新特性解析

    在本教程中,我们将深入探讨iOS10和XCode8的新特性,帮助开发者更好地适配这些更新并提升应用体验。 首先,我们关注的是SiriKit。SiriKit是iOS10引入的一个重大新特性,它允许第三方应用与Siri进行深度集成。开发者...

    ios-友盟分享(精简版).zip

    8. **适配iOS新特性**: - 随着iOS系统的更新,可能需要调整代码以适配新特性或API的变化。 "友盟分享(精简版).txt"文件可能包含了具体的代码示例、配置步骤或者注意事项,帮助开发者更好地理解和使用这个精简版的...

    一步一步学习+iOS+6编程(第四版)-项目源代

    在“一步一步学习+iOS+6编程(第四版)-项目源代码...通过分析这个项目的源代码,不仅可以学习到iOS 6时期的开发技术,还能了解到技术演进的过程,对比现在的Swift和iOS新特性,从而更好地理解移动应用开发的历史和进步。

    最新IOS17.0真机调试包

    每个新版本的iOS都会引入新的特性和改进,开发者需要跟上这些变化,确保其应用能够充分利用新功能,同时保持对旧版本的兼容。 "mac"则代表MacOS,是Apple的桌面操作系统,Xcode就是在这个平台上运行的。开发者通常...

    iOS5 UIViewController 新特性

    在iOS5中,UIViewController引入了一系列的新特性和改进,极大地增强了开发者处理界面和控制视图的能力。以下是对这些新特性的详细说明: 1. **Storyboards**:iOS5引入了Storyboard的概念,这是一种全新的界面设计...

    IOS7新特性大集合Demo

    在iOS 7中,苹果对用户界面和操作系统进行了大规模的更新,引入了许多新的特性和功能,使得开发者可以创建更加丰富、交互性更强的应用程序。这个名为"IOS7新特性大集合Demo"的压缩包文件正是为了展示这些变化而设计...

    iOS9新特性介绍及解决方案(包括Xcode)

    对iOS9新特性介绍及解决方案!iOS 9 新特性 1.网络适配-Https HTTP请求失败 解决了编译问题后,程序跑起来了,却发现很多网络请求失败。这是因为iOS9默认不支持HTTP请求,需要改用更安全的HTTPS(默认用TLS 1.2)...

    NewFeature-iOS版本新特性 swift

    在"NewFeature-iOS版本新特性 swift"这个主题中,我们主要关注的是使用Swift 3.0编写的iOS应用新特性。下面将详细介绍Swift 3.0的关键改进和如何通过这些特性来优化iOS应用。 1. **Swift 3.0语法改进**:Swift 3.0...

    ios 4 新特性 多任务

    通过深入理解iOS 4的多任务特性,开发者可以构建出更高效、更符合用户需求的应用程序。同时,了解并利用好相关工具和API,是优化应用的关键。在实际开发中,应充分测试和调试,确保应用在各种状态下都能稳定运行。

    iOS6.0 新特性研究及Demo

    在iOS6.0中,Apple引入了一系列新特性,极大地增强了用户体验和开发者的工作效率。这篇文稿将深入探讨其中几个关键的更新,包括PassKit、深度社交网络集成、Collection Views以及Storyboard的使用。以下是对这些主题...

    iOS组件与框架——iOS SDK高级特性剖析 源代码

    本资源"iOS组件与框架——iOS SDK高级特性剖析 源代码"正是为了深入理解这些高级特性的绝佳实践资料。 首先,我们要理解什么是iOS组件。组件主要包括UIKit、Cocoa Touch、Core Data、Core Location等,它们是构建...

    iOS 10 UICollectionView新特性1

    虽然不是新特性,但在优化滑动体验的过程中,合理使用UIRefreshControl能确保用户在刷新数据时保持界面的流畅性。 综上所述,iOS 10对UICollectionView的优化集中在提高滑动性能、预加载机制、自适应布局以及交互式...

    iOS10开发新特性预览

    iOS10开发新特性预览:基于Apple官方文档和网络上针对iOS10版本的分析,对iOS10开发中的一些新特性进行介绍,选择的是一些重要而又有趣的更新进行阐述

Global site tag (gtag.js) - Google Analytics