IOS开发中的小问题整理,持续更新(小问题,大麻烦)

1.iOS程序启动画面的制作

     做一张名为Default.png的欢迎界面图片放在Supporting Files文件夹下替换掉默认的Default.png(为了适配,需要做Default.png、[email protected][email protected]三种尺寸各一张)。
     然后在XXXAppDelegate.m中

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions  这个方法中插入以下一行代码:

  [NSThread sleepForTimeInterval:5.0];  
  //其实这一行代码也可以不加,因为默认情况下欢迎界面的时间只有一秒,加这一句是延长
  //欢迎界面的展示时间到5秒,时间大家可以自己定义。

  例如:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
  self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
  self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]autorelease];

  [NSThread sleepForTimeInterval:5.0];

  self.window.rootViewController = self.viewController;
  [self.window makeKeyAndVisible];
  return YES;
}

这样页面就停留5秒后再消失了。


2.控制textView从最顶端开始显示

    if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) {
        self.automaticallyAdjustsScrollViewInsets = NO;
    }


3.数组筛选,根据两个字段进行筛选 判断数组对象中的cityName和pinyin两个字段是否都匹配

   NSPredicate *predicate = [NSPredicate predicateWithFormat:@"cityName contains [cd] %@ OR pinyin BEGINSWITH [cd] %@", _searchController.searchBar.text,_searchController.searchBar.text];
   _filterData = [[NSArray alloc] initWithArray:[_cityData filteredArrayUsingPredicate:predicate]];

4.更改状态栏字体颜色

1)、如果使用了UINavigation 则自己实现一个 UINavigationController 
并在实现的这个自定义导航控制器中重写一个方法:
- (UIViewController *)childViewControllerForStatusBarStyle{
    return self.topViewController;
}
表示所有的状态栏效果都跟随根控制器。
2)、在每一个控制器类中,通过调用下面方法可变更状态栏文字颜色为默认(黑色)或者白色
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];//白色
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];//黑色

3)、其他变更方法:



5.导航效果存在但是使用自定义导航条的解决办法

[self.navigationController setNavigationBarHidden:NO];       // 使导航条有效
[self.navigationController.navigationBar setHidden:YES];//但是隐藏bar 使用自定义


6.手动调整状态栏方向

ios7,碰到个需要手动调整状态栏方向的问题,于是调用了下面这段代码。
//设置状态栏 横屏
[[UIApplication sharedApplication]setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];

问题来了,没有效果。
原因是 UIviewController方法- (BOOL)shouldAutorotate 返回值为YES的时候是不生效的。
发现原因了,马上解决,发现还是不行。
立马发现了下个问题,覆写方法- (BOOL)shouldAutorotate,仍然未生效。

答案是:由于UIViewController放置在Navigation中,而由于Navigation不人性化的设计,
navigation的- (BOOL)shouldAutorotate是不会根据显示ViewController的- (BOOL)shouldAutorotate设置的值来改变的。

解决办法:将下面这段代码贴在AppDelegate.m的最后面,这个时候Navigation就会根据你显示的ViewController改变返回值了,然后你再去ViewController中覆写方法,返回NO,这时候,方法生效了!bingo!

@implementation UINavigationController (Rotation)
- (BOOL)shouldAutorotate
{
    return [[self.viewControllers lastObject] shouldAutorotate];
}
- (NSUInteger)supportedInterfaceOrientations
{
    return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}
@end


7.当xcode更新到7.0后项目变化带来的问题(持续更新)

1)、IOS9 开始产生的问题:在iOS9 beta1中,苹果将原http协议改成了https协议,使用 TLS1.2 SSL加密请求数据。

解决办法:

在info.plist中添加
<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict>

IOS开发中的小问题整理,持续更新(小问题,大麻烦)_第1张图片

2)、xcode7更新后 出现的真机调试错误

ld: 'MAMapKit.framework/MAMapKit' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture armv7

问题分析:

从上述的错误中应该可以看出,这是因为一个第三方的库不兼容,我的工程中开启了 ENABLE_BITCODE (应该是升级之后自动转换的),而这个第三方的库在编译的时候没有 enable bitcode,所以导致上诉问题。

解决方法:

应该是有两种吧,一种就是换成 enable bitcode 的第三方库,再有一种就是将工程的 ENABLE_BITCODE 设置为 false 就可以了。



你可能感兴趣的:(IOS开发中的小问题整理)