iOS开发过程中的各种坑
2015-10-13 15:22
204 查看
项目开发过程中不可避免的会遇到各种坑,本系列博客的主要目的是将其解决方法各个记录下来,以后再遇到就手到擒来了。
1,防止多个按钮同时按下
[btn setExclusiveTouch:YES];
增加这个语句,防止其他touch事件的分发,当一个按钮响应了touch事件之后,其他按钮就不可点击了。
2,Push到ViewController后的scrollView子View错位
同一个ViewController,用Modal和Push不同的方法显示后,发现某scrollView里面的子View在垂直方向上位置不对。后来查找发现用:
self.automaticallyAdjustsScrollViewInsets = NO;
可以解决问题,这个property默认值是YES。苹果的本意是,使用Push显示之后,由于navigation controller有个navigation bar,如果你的view(适用于tableview controller)还是从y=0开始的话会有一部分被遮盖。但是SDK用了个一刀切的解决办法,就是把所有的scrollview的inset设置了一下使得其所有子view都向下移动了64点,包括我们项目中用到的scrollview(这个还是水平方向的,非常无辜)。
3,一些不能修改大小的控件
一天就遇到两个:UIPickerView和UISwitch。对于UIPickerView,只能修改宽度,高度只有162,180,216三个固定值,iOS会根据你设置的高度选一个最接近的来显示。不过还是有方法来限制高度:方法一是将它作为另外一个view的subview,限制这个view的高度并且设置clip属性来截断UIPickerView的多余显示区域。方法二是使用iOS的变换函数修改其高度。
UISwitch直接限制了高度和宽度,不过修改它的形状的需求并不多,直接使用即可。
4,UITextField输入过长后字符不自动左移
正常来说,当UITextField不限制字数而用户输入很长的时候,最前边输入的字符会自动左移,光标会一直停留在最后的位置。但是,如果UITextField的高度比字体高度小的话,会出现一直输入但是字符不左移的问题。解决方法是放大UITextField的高度或者调小字体。
5,UITextField不能设置inset的问题
有时候需要设置UITextField的字与边框的问题,但是这个控件没有inset的属性。这时候可以取巧的设置其leftView为制定大小的空白view来达到这样的效果,注意要同时设置leftViewMode为always,这样的话这个view才会一直显示。
6,iOS7之后设置UITableView的cell的选中颜色
苹果原来提供的API你会发现设置了之后毫无效果,需要使用:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
....
UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor colorWithRed:(76.0/255.0) green:(161.0/255.0) blue:(255.0/255.0) alpha:1.0]; // perfect color suggested by @mohamadHafez
bgColorView.layer.masksToBounds = YES;
cell.selectedBackgroundView = bgColorView;
....
return cell;
}
1,防止多个按钮同时按下
[btn setExclusiveTouch:YES];
增加这个语句,防止其他touch事件的分发,当一个按钮响应了touch事件之后,其他按钮就不可点击了。
2,Push到ViewController后的scrollView子View错位
同一个ViewController,用Modal和Push不同的方法显示后,发现某scrollView里面的子View在垂直方向上位置不对。后来查找发现用:
self.automaticallyAdjustsScrollViewInsets = NO;
可以解决问题,这个property默认值是YES。苹果的本意是,使用Push显示之后,由于navigation controller有个navigation bar,如果你的view(适用于tableview controller)还是从y=0开始的话会有一部分被遮盖。但是SDK用了个一刀切的解决办法,就是把所有的scrollview的inset设置了一下使得其所有子view都向下移动了64点,包括我们项目中用到的scrollview(这个还是水平方向的,非常无辜)。
3,一些不能修改大小的控件
一天就遇到两个:UIPickerView和UISwitch。对于UIPickerView,只能修改宽度,高度只有162,180,216三个固定值,iOS会根据你设置的高度选一个最接近的来显示。不过还是有方法来限制高度:方法一是将它作为另外一个view的subview,限制这个view的高度并且设置clip属性来截断UIPickerView的多余显示区域。方法二是使用iOS的变换函数修改其高度。
UISwitch直接限制了高度和宽度,不过修改它的形状的需求并不多,直接使用即可。
4,UITextField输入过长后字符不自动左移
正常来说,当UITextField不限制字数而用户输入很长的时候,最前边输入的字符会自动左移,光标会一直停留在最后的位置。但是,如果UITextField的高度比字体高度小的话,会出现一直输入但是字符不左移的问题。解决方法是放大UITextField的高度或者调小字体。
5,UITextField不能设置inset的问题
有时候需要设置UITextField的字与边框的问题,但是这个控件没有inset的属性。这时候可以取巧的设置其leftView为制定大小的空白view来达到这样的效果,注意要同时设置leftViewMode为always,这样的话这个view才会一直显示。
6,iOS7之后设置UITableView的cell的选中颜色
苹果原来提供的API你会发现设置了之后毫无效果,需要使用:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
....
UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor colorWithRed:(76.0/255.0) green:(161.0/255.0) blue:(255.0/255.0) alpha:1.0]; // perfect color suggested by @mohamadHafez
bgColorView.layer.masksToBounds = YES;
cell.selectedBackgroundView = bgColorView;
....
return cell;
}
相关文章推荐
- 2015年最新苹果开发者账号注册流程详解
- PhoneGap/Cordova插件开发入门(IOS版)(一)
- ios推送 程序未启动,收到推送消息,打开应用后跳转到相应的活动页面的代码。
- iOS 按钮小知识点总结
- 在ios中开发使用自动布局约束小注意点。
- IOS远程推送(转载)
- iOS ViewController生命周期
- NSPredicate 模糊、精确、查询
- iOS中的动画
- iOS 9 适配
- IOS 在功能 autorelease release
- 在iOS开发中如何裁剪一个圆图像
- iOS英语—》中国本土化,如调用专辑,摄像头的变化“cancel”,“photos”至“撤消”,“摄像头”
- iOS 多线程开发
- 用segmentedControl控制显示n个页面之一(思想、思路、无代码)--iOS开发
- IOS中简单的KVO概念理解与应用
- iOS开发-- 开发环境,证书和授权文件
- IOS NSURL基本操作
- iOS TableViewCell 动态调整高度
- ios9需要注意的地方