1. 对于系统UIButton设置富文本的坑
_submitButton.titleLabel.attributedText = [self creatAttributedString];
#有效
[_submitButton setAttributedTitle: [self creatAttributedString] forState:UIControlStateNormal];
为什么不能这样呢,SDK说的很明确。
2. 避免多个UICollectionView 在一个View中
如果你在一个页面中创建了多个 UICollectionView 它们使用一套代理方法,也许在每个代理方法中你对当前的UICollectionView 做了判断,使用了不用的数据源,可是你会发现还是有莫名其妙的Bug,而且往往这些Bug,难以解释。
正确的做法是: 如上图的效果,自定义一个包含一个Label 一个UICollectionView的视图,创建两个对象即可,这样可避免多个UICollectionView使用一套代理协议造成的莫名其妙的Bug。
3. 限制输入小数点两位,超出限制范围输入不了
这也算一条路,与其最后弹框提示,不如不让其输入违法字符。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (![textField isMemberOfClass:[OSTextField class]]) {
return NO;
}
NSMutableString * futureString = [NSMutableString stringWithString:textField.text];
[futureString insertString:string atIndex:range.location];
NSInteger flag=0;
const NSInteger limited = 2;
for (NSInteger i = futureString.length-1; i>=0; i--) {
if ([futureString characterAtIndex:i] == '.') {
if (flag > limited) {
return NO;
}
break;
}
flag++;
}
return YES;
}
4. Bool和bool 的不同之处
OC 中的BOOL 实际上是一种对带符号的字符类型(signed char)的类型定义(typedef),它使用8位的存储空间。通过#define指令把YES定义为1,NO定义为0。
注意:objective-c 并不会将BOOL作为仅能保存YES或NO值的真正布尔类型来处理。编译器仍将BOOL认作8位二进制数,YES 和 NO 值只是在习惯上的一种理解。
问题:如果不小心将一个大于1字节的整型值(比如short或int)赋给一个BOOL变量,那么只有低位字节会用作BOOL值。如果该低位字节刚好为0(比如8960,写成十六进制为0x2300),BOOL值将会被认作是0,即NO值。
而对于bool类型,只有true和false的区别,即0为false,非0为true。
举例:
BOOL b1=8960; // 实际是 NO, 因为8960换成十六进制为0x2300,BOOL 只有8位存储空间,取0x2300的低8位,00,所以是NO
bool b2=8960;//实际是true, 因为bool类型,非0即为true。
5. cellForRowAtIndexPath的崩溃问题
ReportTableViewCell *cell = [Tb cellForRowAtIndexPath:[NSIndexPath indexPathForRow:5 inSection:0]];
inSection 不带就崩溃,这在表的删除某行,插入某行是同样适用。
6.Pop回来导航栏隐藏时出现上出现一片空白
方法1 [self.navigationController.navigationBar setHidden:YES];
方法2 [self.navigationController setNavigationBarHidden:YES];
方法3 [self.navigationController setNavigationBarHidden:YES animated:YES];
使用第三种方法,就不会出现返回时一片空白的情况了。
7.UILabel上下居中
图中使用的是一个Label,为什么会出现图中这样的问题,出现顶部的大片空白是因为这个Label的高度太高,而内容却相对较少,把Label的高度设置短点即可。
8.UIImageView的几种图片填充方式
typedef enum {
UIViewContentModeScaleToFill,
UIViewContentModeScaleAspectFit, // contents scaled to fit with fixed aspect. remainder is transparent
UIViewContentModeScaleAspectFill, // contents scaled to fill with fixed aspect. some portion of content may be clipped.
UIViewContentModeRedraw, // redraw on bounds change (calls -setNeedsDisplay)
UIViewContentModeCenter, // contents remain same size. positioned adjusted.
UIViewContentModeTop,
UIViewContentModeBottom,
UIViewContentModeLeft,
UIViewContentModeRight,
UIViewContentModeTopLeft,
UIViewContentModeTopRight,
UIViewContentModeBottomLeft,
UIViewContentModeBottomRight,
} UIViewContentMode;
UIViewContentMode 是UIView的属性,默认是第一种 UIViewContentModeScaleToFill,UIImageView下即图片适应UIImageView尺寸铺满 UIImageView。
其他模式的效果如下:
默认是这样的
折中方法:
[self.headImage setContentMode:UIViewContentModeScaleAspectFill];
self.headImage.clipsToBounds = YES;
后是这样的
9.swf是什么文件
swf是flash动画文件,不少朋友经常玩的网页游戏以及网页视频电影其实都是swf文件,swf文件在网络中非常常见,比如:优酷或土豆视频播放的都是swf文件
大家只要简单的理解为swf文件是动画文件即可,swf(shock wave flash)是Macromedia(现已被ADOBE公司收购)公司的动画设计软件Flash的专用格式,是一种支持矢量和点阵图形的动画文件格式,被广泛应用于网页设计,动画制作等领域。
不过对于一个链接为 http:XXXXXXXXXXXX.swf 的视频链接,使用原声的视频播放器是无法播放的,而且使用 UIWebVIew加载也是无法显示的,可以这样理解,苹果封杀了 Flash文件(swf格式),不支持Flash的播放,这跟乔布斯讨厌Flash有关,目前为止,除了格式转化为 HTML文件播放,原声iOS环境是不支持swf文件的播放。