兼容sdk7&iOS7的issue解决小片段总结

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代码  

  1. #define NLSystemVersionGreaterOrEqualThan(version) ([[[UIDevice currentDevice] systemVersion] floatValue] >= version)
  2. #define IOS7_OR_LATER NLSystemVersionGreaterOrEqualThan(7.0)
  3. #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1
  4. if (IOS7_OR_LATER) {
  5. //适配7的代码,这里是在sdk7,ios7中代码
  6. }
  7. #endif
  8. //xcode4.6  支持run ios7
#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代码  

  1. #ifndef kCFCoreFoundationVersionNumber_iOS_6_1
  2. #define kCFCoreFoundationVersionNumber_iOS_6_1 793.00
  3. #endif
  4. #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1
  5. #define IF_IOS7_OR_GREATER(...) \
  6. if (kCFCoreFoundationVersionNumber > kCFCoreFoundationVersionNumber_iOS_6_1) \
  7. { \
  8. __VA_ARGS__ \
  9. }
  10. #else
  11. #define IF_IOS7_OR_GREATER(...)
  12. #endif
#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代码  

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

判断运行时方法:

- (BOOL)respondsToSelector:(SEL)aSelector;

例如:

Java代码  

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

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

下面兼容低于ios7的版本:

Java代码  

  1. #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
  2. if (IOS7_OR_LATER) {
  3. [tabelView setSeparatorInset:UIEdgeInsetsZero];//
  4. }
  5. #endif
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
        if (IOS7_OR_LATER) {
            [tabelView setSeparatorInset:UIEdgeInsetsZero];//
        }
#endif

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

Java代码  

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

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

UILabel不一致的background

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

Java代码  

  1. view.backgroundColor = [UIColor clearColor];
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代码  

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

  1. self.edgesForExtendedLayout = UIRectEdgeNone;
self.edgesForExtendedLayout = UIRectEdgeNone;

extendedLayoutIncludesOpaqueBars

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

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

例如:

Java代码  

  1. 在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中给uinavigationbar设置背景图片使之不透明:
  2. CGSize imageSize = CGSizeMake(1, 1);
  3. UIGraphicsBeginImageContextWithOptions(imageSize, YES, 0);
  4. [[UIColor greenColor] set];
  5. UIBezierPath * path = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, imageSize.width, imageSize.height)];
  6. [path fill];
  7. UIImage *image = UIGraphicsGetImageFromCurrentImageContext ();
  8. UIGraphicsEndImageContext();
  9. [[UINavigationBar appearance] setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
在- (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代码  

  1. self.extendedLayoutIncludesOpaqueBars = YES;
self.extendedLayoutIncludesOpaqueBars = YES;

隐藏状态条

原来在ios6中是:

Java代码  

  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  2. {
  3. // Override point for customization after application launch.
  4. [[UIApplication sharedApplication] setStatusBarHidden:YES];
  5. return YES;
  6. }
- (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代码  

  1. - (BOOL)prefersStatusBarHidden
  2. {
  3. return YES;
  4. }
- (BOOL)prefersStatusBarHidden
{
    return YES;
}

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

 状态栏样式修改:

在在UIViewController或子类中实现以下两个方法:

Java代码  

  1. - (BOOL)prefersStatusBarHidden
  2. {
  3. return YES;
  4. }
  5. - (UIStatusBarStyle)preferredStatusBarStyle{
  6. return UIStatusBarStyleLightContent;
  7. }
- (BOOL)prefersStatusBarHidden
{
    return YES;
}
- (UIStatusBarStyle)preferredStatusBarStyle{
    return UIStatusBarStyleLightContent;
}

在需要刷新状态栏样式的时候,调用

Java代码  

  1. - (void)setNeedsStatusBarAppearanceUpdate
- (void)setNeedsStatusBarAppearanceUpdate 

在iOS7 UINavigationController中侧滑手势返回

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

Java代码  

  1. self.navigationController.interactivePopGestureRecognizer.delegate = self;
  self.navigationController.interactivePopGestureRecognizer.delegate = self;

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

Java代码  

  1. self.navigationController.interactivePopGestureRecognizer.enabled = NO;
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代码  

  1. UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
  2. initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
  3. target:nil action:nil];
  4. negativeSpacer.width = -16;// it was -6 in iOS 6
  5. [self.navigationItem setLeftBarButtonItems:[NSArray arrayWithObjects:negativeSpacer, requriedButton/*this will be the button which u actually need*/, nil] animated:NO];
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代码  

  1. #import "UINavigationItem+PtHelper.h"
  2. @implementation UINavigationItem (PtHelper)
  3. #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1
  4. - (void)setLeftBarButtonItem:(UIBarButtonItem *)_leftBarButtonItem
  5. {
  6. if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
  7. {
  8. UIBarButtonItem *negativeSeperator = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
  9. negativeSeperator.width = -16;
  10. if (_leftBarButtonItem)
  11. {
  12. [self setLeftBarButtonItems:@[negativeSeperator, _leftBarButtonItem]];
  13. }
  14. else
  15. {
  16. [self setLeftBarButtonItems:@[negativeSeperator]];
  17. }
  18. [negativeSeperator release];
  19. }
  20. else
  21. {
  22. [self setLeftBarButtonItem:_leftBarButtonItem animated:NO];
  23. }
  24. }
  25. - (void)setRightBarButtonItem:(UIBarButtonItem *)_rightBarButtonItem
  26. {
  27. if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
  28. {
  29. UIBarButtonItem *negativeSeperator = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
  30. negativeSeperator.width = -10;
  31. if (_rightBarButtonItem)
  32. {
  33. [self setRightBarButtonItems:@[negativeSeperator, _rightBarButtonItem]];
  34. }
  35. else
  36. {
  37. [self setRightBarButtonItems:@[negativeSeperator]];
  38. }
  39. [negativeSeperator release];
  40. }
  41. else
  42. {
  43. [self setRightBarButtonItem:_rightBarButtonItem animated:NO];
  44. }
  45. }
  46. #endif
  47. @end
#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代码  

  1. CGSize size = CGSizeMake(screenSize.width - self.horizontalMargin * 4.f, 1000.f);
  2. if(IOS7_OR_LATER){
  3. CGRect textRect = [text boundingRectWithSize:size options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:@{NSFontAttributeName:font} context:nil];
  4. self.contentWidth = self.contentWidth!=0.f?self.contentWidth:textRect.size.width;
  5. self.contentHeight = self.contentHeight!=0.f?self.contentHeight:textRect.size.height;
  6. }else{
  7. CGSize  textSize = [text sizeWithFont:font constrainedToSize:size lineBreakMode:UILineBreakModeWordWrap];
  8. self.contentWidth = self.contentWidth!=0.f?self.contentWidth:textSize.width;
  9. self.contentHeight = self.contentHeight!=0.f?self.contentHeight:textSize.height;
  10. }
 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,在索引没有被触摸时默认是白色。

Java代码  

  1. if (IS_IOS_7) {
  2. self.playersTableView.sectionIndexBackgroundColor = [UIColor clearColor];
  3. //        self.playersTableView.sectionIndexTrackingBackgroundColor = [UIColor clearColor];
  4. }
    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.

时间: 2024-12-17 01:14:33

兼容sdk7&iOS7的issue解决小片段总结的相关文章

Visual Studio 2012出现“无法访问T-SQL组件和安装了不兼容伯 DacFx版本”的解决办法

参考:Visual Studio 2012出现“无法访问T-SQL组件和安装了不兼容伯 DacFx版本”的解决办法 Vs2012的下载地址: https://msdn.microsoft.com/en-us/jj650015

网页乱码解决小心得

出现乱码需要检查的项目:数据库编码.文件本身的字符集.html解析的字符集,如若上述项目编码一致仍然出现乱码,查看一下浏览器的编码,如果和设置的不一样说明上述设置有部分未成功,可以尝试使用header()函数再转化一下. FYI: 1. header("Content-type: text/html; charset=utf-8"); 2. <meta http-equiv="Content-Type" content="text/html; cha

解决小程序中Data.parse()获取时间戳IOS不兼容

由于与后台接口必须对比时间戳所以首先得前台获取时间戳.刚开始是获取手机本地时间,但用户改了时间就废了..... 后来就从服务器上获取个时间再转换为时间戳(是不是很操蛋,先从服务器上获取在TM的自己比较),但后台直接给我一个时间戳不就完事了么, 还就给我一个时间自己转然后问题就来了. [csharp] view plain copy var resData = '2017-3-14 10:03:45' console.log("返回时间:" + resData) var time = D

鼠标滚动放大小缩小实现(火狐不兼容,还不知道怎么解决)

<script type="text/javascript"> function bigimg(i){ var zoom = parseInt(i.style.zoom,10)||100; zoom += event.wheelDelta / 12; if(zoom > 0 ) i.style.zoom=zoom+'%'; return false; } </script> <center> <a href="http://ww

ie7、ie8兼容addEventListener和removeEventListener,解决this指向和detachEvent解除绑定事件问题

现代浏览器监听事件使用addEventListener函数,解除绑定监听使用removeEventListener函数.但是ie7.ie8监听事件使用attachEvent函数,解除监听事件使用detachEvent函数. 简单的兼容函数: 1 if(document.addEventListener){ 2 element.addEventListener(type, fun, useCapture); 3 }else{ 4 element.addEventListener("on"

js中使用new Date(str)创建时间对象不兼容firefox和ie的解决方式

还是上次的那个时间滑动条问题,突然发现在火狐和ie上面刻度和时间都没显示出来(本人开发的时候使用谷歌,当时没去测),于是就开始在那么多行代码中加断点调试,最后发现new Date(strDate);返回的是无效的时间格式,我就郁闷了~~~~~于是就去看api中看date的说明,就在里面找其它的构造方法尝试,果然功夫不负有心人啊!!!!终于可以安心的下班了!!!!代码如下: /** * 解决 ie,火狐浏览器不兼容new Date(s) * @param strDate * 返回 date对象 *

ie浏览器不兼容css媒体查询的解决办法

考虑到在不同分辨率下,网站页面依然能显示一致,除了通过js来控制,css媒体查询更为方便,而痛点在于ie8不支持. 我们可以通过respond.js库来解决,这个插件的原理很简单: 将head中所有外部引入的css文件路径取出来存储在一个数组中,遍历数组,并一个个发送AJAX请求,AJAX回调后,分析response中的media query的min-width和max-width语法,它仅仅支持min-width和max-width,分析出viewport变化区间对应相应的css块,页面初始化

IE7、IE8不兼容js trim函数的解决方法

IE兼容,有时候让人头疼,但又不得不去解决. 先看看一下代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <s

arc下内存泄漏的解决小技巧

一定要注意,我们运行app时,一定要关心内存的使用,尽量不要超过20M,即使有很多图片要显示也绝对不能超过30M.所以运行自己开发的app时多关心内存的使用是个很好的习惯. 对于性能,内存的优化,这个涉及的就太多了.现在先讲讲几个最基本常见的内存泄露下的解决方法. 1. instruments instrument可以报出不少内存泄露的错误,方法:http://www.cocoachina.com/ios/20141203/10519.html,很容易操作. 不过它最大的功能还是可以自己看出哪里