iOS 小坑集锦

在做自己的第一个 iOS app,一路遇到不少困难,好在靠 Google 和 StackOverflow 都解决了,自己也不知道是否是 best practice,为了赶进度只要 work 就好。

隐藏 Tab bar

在以 Tab bar 划分模块的 app 中有些非一级界面是不需要底部的标签栏的,只需要在该 ViewController 的viewWillAppear:中加入设置标签栏隐藏的语句:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.tabBarController.tabBar.hidden = YES;
}

计算 UIScrollView 的 ContentSize

有些 UIScrollView 的内容是动态增减的,这就需要重新计算 ContentSize,在改变内容后增加以下代码:

-(void)resizeScrollViewContentSize {
    [self layoutIfNeeded];
    CGRect contentRect = CGRectZero;
    for (UIView *view in self.subviews) {
        contentRect = CGRectUnion(contentRect, view.frame);
    }
    self.contentSize = CGSizeMake(contentRect.size.width, contentRect.size.height);
}

貌似必须要在计算前最好执行layoutIfNeeded,否则有些 sub view 还没有布局好。

设置 status bar 的文字颜色

iOS7以后,status bar 的背景颜色变成了透明色,而且系统会根据 app的颜色自动改变 status bar 的字体颜色(黑和白)。但是这个自动改变的字体颜色并不一定和所有的 app 都搭配,比如我们 app 的主题色是稍微浅一丢丢的蓝,但是系统匹配的 status bar 的字体颜色就是黑色,看起来就很不爽,所以就要强制将其改为白色。

  1. 首先在 Info.plist 中的 Information Property List 中添加一个 Key为View
    controller-based status bar appearance
    的 item,其 Type 设为 Boolean,Value 设为 NO。
  2. 然后在AppDelegate.mapplication:didFinishLaunchingWithOptions:中添加:

    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

计算多行文本的高度

UILabel 和 UITextView 可以显示多行的文本,如果字符串是动态获取的话就需要计算整个文本的高度了(宽度一般是固定的),这时就要用到boundingRectWithSize:
options: attributes: context:
这个 API 了(iOS7新增的)。为了方便自己工程中调用,我封装了一下:

+ (CGRect)stringRect:(NSString *)string fontSize:(CGFloat)fontSize constraintWidth:(CGFloat)width constraintHeight:(CGFloat)height {
    UIFont *font = [UIFont systemFontOfSize:fontSize];
    CGSize constraint = CGSizeMake(width, height);
    NSDictionary *attributes = @{NSFontAttributeName : font};
    return [string boundingRectWithSize:constraint
                                options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
                             attributes:attributes
                                context:nil];
}

去掉字符串头尾的空格

对于 UITextField 中输入的字符串往往都要进行 trim 处理,需要用到以下代码:

NSString *result = [self..nameTextField.text
                          stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

监听 UITextView 的输入,实时显示字数

首先要 conform(遵从?实现?) UITextViewDelegate,在textViewDidChange:中实现在
UILabel 中显示当前 UITextView 中的字数:

- (void)textViewDidChange:(UITextView *)textView {
    _countLabel.text = [NSString stringWithFormat:@"%lu", (unsigned long)textView.text.length];
    [self setNeedsDisplay];
}

设置 UITextView 的最大输入长度

实现UITextViewDelegate中的textView:shouldChangeTextInRange:方法:

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
   // if (range.location >= kMaxTextLength) { 这样会导致移动光标后再输入最大长度就失效
    if(textView.text.length >= kMaxTextLength) {
        return NO;
    }

    return YES;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-07 17:00:39

iOS 小坑集锦的相关文章

【Swift】iOS开发小坑历险记(二)

前言 这个系列主要是一些开发中遇到的坑记录分享,有助于初学者跨过这些坑,攒够 7 条发一篇. 声明  欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文 1.用动画更新约束没有动画效果? 缺少 layoutIfNeeded ,事例: UIView.animateWithDuration(0.15, animations: { () -> Void in self.heightConst

iOS 小知识-tips

--->1<--- arc的项目中使用非arc代码,则添加-fno-objc-arc: 非arc项目中使用arc代码,则添加-fobjc-arc. --->2<--- 实用的类 NSKeyedArchiver [UIScreen mainScreen] [UIDevice currentDevice] [UIFont familyNames] [UIApplication sharedApplication] [NSUserDefaults standardUserDefaults

iOS 小技巧总结,绝对有你想要的

iOS 小技巧总结,绝对有你想要的 原文链接:http://www.jianshu.com/p/4523eafb4cd4 在这里总结一些 iOS 开发中的小技巧,能大大方便我们的开发,持续更新. —— 由 xcvxvxc分享 在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 在viewWillAppear里面添加如下代码: //分组列表头部空白处理 CGRect frame = myTableView.tableHeade

支付宝集成的小坑--集成支付宝集成总结(1)

现在很多公司的APP都会有支付环节,特别是现在的O2O项目,我参与过的近两个项目都有集成支付宝对两次集成做一下总结: 第一次集成支付宝,由于我们的做后台的大牛写了十几年代码,而且以前是银行项目的总监,整个支付流程基本上一切听大牛的,我按照做就行.基本上按照支付宝的流程走,支付环节没怎么出问题,总体来说支付流程比较perfect. 第一次集成的小坑: 1)无非就是支付宝里面使用了一些框架如SBJson 等常用的开源框架,而我们项目中也会用到SBJson类似的框架,估计会出现冲突 冲突的解决办法:A

iOS小技巧--用runtime 解决UIButton 重复点击问题

iOS小技巧–用runtime 解决UIButton 重复点击问题 什么是这个问题 我们的按钮是点击一次响应一次, 即使频繁的点击也不会出问题, 可是某些场景下还偏偏就是会出问题. 通常是如何解决 我们通常会在按钮点击的时候设置这个按钮不可点击. 等待0.xS的延时后,在设置回来; 或者在操作结束的时候设置可以点击. - (IBAction)clickBtn1:(UIbutton *)sender { sender.enabled = NO; doSomething sender.enabled

一个关于Windows下SetCursorPos和GetCursorPos的小坑

这两天在做一个编辑特定格式Mesh的小工具,需要检查鼠标的移动,一般来说可以用WM_MOUSEMOVE事件解决的,但是我为了省事用了定时查询+设置的方式,也就是: 1 void Frame(void) 2 { 3 //do something else... 4 5 POINT cursorPos; 6 GetCursorPos(&cursorPos); 7 curMoveX = cursorPos.x - cursorBaseX; 8 curMoveY = cursorPos.y - curs

C#中的Infinity有个小坑

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 昨天家里有事,上网也不方便,就没有推送文章.今天很累,也不长篇大论了.简单介绍一下最近遇到的一个小坑. 我们知道,在C#中主要有如下几种数值类型:int.long.decimal.float和double.对于前三种,如果除零,那么会提示表达式错误(直接书写数字)或报DivideByZeroException异常(使用变量):对于后面两种,除零会得到正负无穷大,除非你是0.0/0.0那么会得到NaN

C 小问题集锦

摘要:在学习 C 语言编程中遇到的一些容易混淆出错的问题,记录下来备忘. C语言学习 小问题集锦 作者:乌龙哈里 时间:2015-11-24 平台:Window7 64bit,C# :Visual Studio Community 2015, C:TCC 0.9.26(x86-64 Win64) 参考: 章节: 数组元素 a[n++] 是 a[n] 还是 a[n+1]? 2个递归到底如何运行? 传递数组的元素个数? 正文: 一.数组元素 a[n++] 是 a[n] 还是 a[n+1]? 在学习排

ios学习笔记图片+图片解释(c语言 oc语言 ios控件 ios小项目 ios小功能 swift都有而且笔记完整喔)

下面是目录其中ios文件夹包括了大部分ios控件的介绍和演示,swift的时完整版,可以学习完swift(这个看的是swift刚出来一周的视频截图,可能有点赶,但是完整),c语言和oc语言的也可以完整的学习完所需知识,,其他文件夹的内容如其名说描述一样 没张图片都有文字说明,可以需要该功能的时候搜索一下然后打开图片就可以学习到 网盘下载地址:需要的话给留言我再传上去 http://www.cnblogs.com/langtianya原创 ios学习笔记图片+图片解释(c语言 oc语言 ios控件