今天花了一下午的时间解决iOS的适配问题,本来使用了autolayout好好的,一个新同事拿到ios6.1上去一测,导航条和view中间空了一大截。
着了好多办法,最后发现苹果公司对iOS7.0专门设置了一个属性:
/*
 New behavior on iOS 7.
 Default is YES.
 You may force an opaque background by setting the property to NO.
 If the navigation bar has a custom background image, the default is inferred 
 from the alpha values of the image—YES if it has any pixel with alpha < 1.0
 If you send setTranslucent:YES to a bar with an opaque custom background image
 it will apply a system opacity less than 1.0 to the image.
 If you send setTranslucent:NO to a bar with a translucent custom background image
 it will provide an opaque background for the image using the bar's barTintColor if defined, or black
 for UIBarStyleBlack or white for UIBarStyleDefault if barTintColor is nil.
 
*/
@property(nonatomic,assign,getter=isTranslucent) BOOL translucent NS_AVAILABLE_IOS(3_0);  //  Default is NO on iOS 6 and earlier. Always YES if barStyle is set to UIBarStyleBlackTranslucent

好吧,问题就在这里。在代码中做一下系统版本判断,然后设置这个属性为NO。

一切就好了,哎,浪费时间啊!如果不改它,autolayout就会和你做对的。各位珍重.
// 继承UINavigationController,加入一个实现
-( void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
     // 适配ios7
     if( ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 7.0)){
        self.navigationBar.translucent = NO;
    }
}