iOS 日常总结二

iOS 日常总结一
iOS 日常总结二

1. 系统方法用法总结

  • 1.layoutSubviews: 默认没有做任何事情, UIView子类中重写;
    1.1 addSubview会触发, 如果viewframe不为CGRectZero则会再次触发;
    1.2 已经被addSubview后, 调整其frame也会触发;
    1.3 滚动, 旋转也会触发;

  • 2. setNeedsLayout: 当一个UIView对象调用此方法时, 相当于做了一个标记, 告知需要重新布局, 当前runloop周期结束后会调用layoutSubviews;

  • 3. layoutIfNeeded: 如果布局(frame, bounds)发生变化或者有(setNeedsLayout)标记, 调用此方法会强制立即调用layoutSubviews;

  • 4. drawRect: 重写UIView类的此方法进行绘图操作, 在此方法中获取图形上下文进行绘图渲染;

  • 5. setNeedsDisplay: 标记为需要为重绘, 合适时机调用drawRect;

  • 6. setNeedsDisplayInRect: 标记为局部需要重绘, 合适时机调用drawRect;

  • 7. sizeToFit : 计算出最优的size并且改变自己的 size;

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 0, 0)];
    [label setBackgroundColor:[UIColor grayColor]];
    [label setFont:[UIFont systemFontOfSize:20]];
    label.text = @"Test";
    #sizeToFit:直接改变了这个label的宽和高,使它根据上面字符串的大小做合适的改变
    [label sizeToFit];
    NSLog(@"width=%.1f  height=%.1f ", label.frame.size.width, label.frame.size.height);
    [self.view addSubview:label];
    #打印结果: 2020-08-25 18:26:29.796009+0800 ViewLayout[2340:264781] width=36.5  height=24.0
    
  • 8. sizeThatFits算出最优的size但是不会改变自己size;

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 0, 0)];
    [label setBackgroundColor:[UIColor grayColor]];
    [label setFont:[UIFont systemFontOfSize:20]];
    label.text = @"Test";
    #sizeThatFits并没有改变原始label的大小
    CGSize sizeThatFits = [label sizeThatFits:CGSizeZero];
    NSLog(@"sizeThatFits: width=%.1f  height=%.1f", sizeThatFits.width, sizeThatFits.height);
    NSLog(@"width=%.1f  height=%.1f", label.frame.size.width, label.frame.size.height);
    [self.view addSubview:label];
    2020-08-25 18:28:56.611497+0800 ViewLayout[2347:265814] sizeThatFits: width=36.5  height=24.0
    2020-08-25 18:28:56.611571+0800 ViewLayout[2347:265814] width=0.0  height=0.0
    

你可能感兴趣的:(iOS 日常总结二)