美文网首页
关于AutoLayout

关于AutoLayout

作者: melouverrr | 来源:发表于2016-01-14 16:19 被阅读87次

    关于AutoLayout

    如果有十分动态的UI布局,比如说这种:

    Paste_Image.png
    事实上,这个需求是:yellow和blue均有可能hidden。所以,将下面的ImageView跟yellow和blue还有top的约束设置不同的priority.因为他们都是要改变的,所以最高设为999(应该是对的吧),而不是1000.1000一般是给固定不动的约束设置的priority.初始状态需要满足的就设为999,之后想满足的就设为750及以下。等到需要改变的时候,就把999的变小,750的变大,这样就能够满足之后的约束条件。此时把其他两个hidden就好了。彦祖的简书blog

    别用layout guide.

    因为BottomLayoutGuide是晚于View加载的,如果参考这个,会造成进入页面会卡一下。尽量不要直接参考下面 TopLayoutGuide 则没事.所以每个imageview之类的,尽量放进view里面(就把他当做container)

    UILabel

    把line设为0,定好宽度,这样就能自动换行了

    IBInspectable的使用(UITextField)

    设置textField的leftView
    - (void)setLeftViewImage:(UIImage *)leftViewImage{
    UIImageView *phoneLeftImageView = [[UIImageView alloc] initWithImage:leftViewImage];
    self.frame = CGRectMake(0, 0, 25, 25);
    self.leftView = phoneLeftImageView;
    self.leftViewMode = UITextFieldViewModeAlways;
    }
    //重新定位
    - (CGRect)leftViewRectForBounds:(CGRect)bounds{
    CGRect textRect = [super leftViewRectForBounds:bounds];
    textRect.origin.x += 10;
    return textRect;
    }
    也可以这样
    ![Paste_Image.png](https://img.haomeiwen.com/i1204600/bcaafd4f37e5606b.png?imageMogr2/auto-

    sunnyxxx博客的黑科技

    //小括号内联复合表达式
    RETURN_VALUE_RECEIVER = {(
    // Do whatever you want
    RETURN_VALUE; // 返回值
    )};
    

    如:

    self.backgroundView = ({
    UIView *view = [[UIView alloc] initWithFrame:self.view.bounds];
    view.backgroundColor = [UIColor redColor];
    view.alpha = 0.8f;
    view;
    });
    

    这样让代码更加模块化

    摘录

    这里有一个需要特别注意的问题,也是效率问题。UITableView是一次性计算完所有Cell的高度,如果有1W个Cell,那么- (CGFloat)tableView:(UITableView )tableView heightForRowAtIndexPath:(NSIndexPath )indexPath就会触发1W次,然后才显示内容。不过在iOS7以后,提供了一个新方法可以避免这1W次调用,它就是- (CGFloat)tableView:(UITableView )tableView estimatedHeightForRowAtIndexPath:(NSIndexPath )indexPath。要求返回一个Cell的估计值,实现了这个方法,那只有显示的Cell才会触发计算高度的protocol. 由于[cell.contentView systemLayoutSizeFittingSize]需要cell的一个实例才能计算,所以这儿用一个成员变量存一个Cell的实列,这样就不需要每次计算Cell高度的时候去动态生成一个Cell实例,这样即方便也高效也少用内存,可谓一举三得.

    我们声明一个存计算Cell高度的实例变量:

    @property (nonatomic, strong) UITableViewCell *prototypeCell;
    

    然后初始化它:

    self.prototypeCell  = [self.tableView dequeueReusableCellWithIdentifier:@"C1"];
    

    下面是计算Cell高度的实现:
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    C1 *cell = (C1 *)self.prototypeCell;
    cell.t.text = [self.tableData objectAtIndex:indexPath.row];
    CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
    NSLog(@"h=%f", size.height + 1);
    return 1 + size.height;
    }

    设定位于中心的正方形UIImageView

    self.secondImageview.frame = CGRectMake(0, 0, 200, 200);
    self.secondImageview.center = self.view.center;

    相关文章

      网友评论

          本文标题:关于AutoLayout

          本文链接:https://www.haomeiwen.com/subject/eyfhkttx.html