iOS7 注意事项二三

这两天在工作中做了下iOS7得兼容问题。在项目中发现一些问题。有些猜测(都木有写demo验证过,只是根据项目中得现象做推测。主要是因Xcode5启动模拟器坑爹啊,人品bu爆发基本上cmdR就是”模拟器尚未安装程序“``有木有)

1.项目中使用一个UIView作为容器,布局其他得一些控件,比如说UIButton。假如这个button得位置超出了viewframe,虽然可以显示(view没有clips),但是这个button却不能作响应了

2.在项目中设置frame属性,高不能为负,为负得话会自动调整y值。比如说设置frame是(0010,-10),那么这个frame很有可能变成(0,-10100)。

3.在UITextView,使用sizeToFit方法,那么UITextView得frame将会根据textView得text调整大小。

4.iOS7之前得时候关于UITextView,我们可以通过[[UITextView alloc]init]一个新得textView,然后给textView.text赋值,textView在addSubView。然后通过textView.contentSize得到绘制文本所需得宽高,之后在remove。显然iOS7已经失效,猜测由于之后textView被remove掉,文本并未显示,所以不能回去到。实际上要获得这个可用通过去他得方法,比如说

-boundingRectWithSize: options: attributes: context:


或者知道行数得话还可以通过textView得font属性中,font得lineHeight得到行高计算。顺便说下-boundingRectWithSize: options: attributes: context:获得得大小,需要设置attributes,而这个大小是通过attributes中设置得font得到,这个会有差异存在。比如说,设置得font字体大小是10,行距定义得是15,那么方法得到的大小是基于字体大小10计算,没有考虑行距。
5.iOS7之前得版本,点击UITextView之后,textView调用委托得shouldBeginEdit方法,然后textView变成第一响应者。由于在委托方法中textView还不是第一响应,这个时候在委托方法中调用becomeFirstRespond,之前版本不会有问题。但是在7中becomeFirstRespond会引起委托方法得调用,导致爆栈。
6.iOS7之前UITablleViewCell中得contentView得superView就是UITableViewCell。但是在iOS7得时候,contentView得superView确实UITableViewCellScrollView.UITableViewCellScrollView得superView才是UITableViewCell。考虑到也许之后发生同样得时候,所以如果需要重子View查找指定类型得父视图。考虑使用自定义函数实现

- (UIView*)superviewWithClass:(Class)class child:(UIView*)child

{

   UIView *superview =nil;

    superview = child.superview;

   while (superview !=nil && ![superview isKindOfClass:class]) {

        superview = superview.superview;

    }

   return superview;

}

7.关于UITextView中。之前时候可以在协议

- (void)textViewDidChange:(UITextView *)textView

中获取到最新得contentSize。但是在iOS7中已经不能获取,contentSize在这个协议函数滞后更新
8.仍旧关于UITextView。在iOS7之前当设置frame时,会同时引起contentSize得变化。iOS7中却不会。推测contentSize应该时和text相关联,脱离了frame

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值