关于AutoLayout

2016-01-14  本文已影响87人  melouverrr

关于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;
上一篇下一篇

猜你喜欢

热点阅读