首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

实践-小细节Ⅴ


1. 对于系统UIButton设置富文本的坑

代码语言:javascript
复制
  _submitButton.titleLabel.attributedText = [self creatAttributedString];
  #有效
  [_submitButton setAttributedTitle: [self creatAttributedString] forState:UIControlStateNormal];

为什么不能这样呢,SDK说的很明确。

2. 避免多个UICollectionView 在一个View中

如果你在一个页面中创建了多个 UICollectionView 它们使用一套代理方法,也许在每个代理方法中你对当前的UICollectionView 做了判断,使用了不用的数据源,可是你会发现还是有莫名其妙的Bug,而且往往这些Bug,难以解释。

正确的做法是: 如上图的效果,自定义一个包含一个Label 一个UICollectionView的视图,创建两个对象即可,这样可避免多个UICollectionView使用一套代理协议造成的莫名其妙的Bug。

3. 限制输入小数点两位,超出限制范围输入不了

这也算一条路,与其最后弹框提示,不如不让其输入违法字符。

代码语言:javascript
复制
- (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的崩溃问题

代码语言:javascript
复制
ReportTableViewCell *cell = [Tb cellForRowAtIndexPath:[NSIndexPath indexPathForRow:5 inSection:0]];

inSection 不带就崩溃,这在表的删除某行,插入某行是同样适用。

6.Pop回来导航栏隐藏时出现上出现一片空白

代码语言:javascript
复制
 方法1  [self.navigationController.navigationBar setHidden:YES];  
 方法2  [self.navigationController setNavigationBarHidden:YES];  
 方法3  [self.navigationController setNavigationBarHidden:YES animated:YES];  

使用第三种方法,就不会出现返回时一片空白的情况了。

7.UILabel上下居中

image.png

图中使用的是一个Label,为什么会出现图中这样的问题,出现顶部的大片空白是因为这个Label的高度太高,而内容却相对较少,把Label的高度设置短点即可。

8.UIImageView的几种图片填充方式

代码语言:javascript
复制
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。 其他模式的效果如下:

默认是这样的

代码语言:javascript
复制
折中方法: 
[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文件的播放。

10.获取某个APP的下载链接

使用 Mac 里面的 iTunes

下一篇
举报
领券