AppCode踩坑记

Alt text

使用rightSideType() Default value 一定得填写点东西, 不然出不来

1
2
/* $hashMap$ getType */
$TYPE$ $entries$ = $hashMap$;

hashMap 必须得先有值, 真坑…用注释接收值



AutoLayout中的Content Hugging 和 Content Compression Resistance

参考:
http://blog.csdn.net/yongyinmg/article/details/39526207

Content Hugging 和 Content Compression Resistance

这两个属性对有intrinsic content size的控件(例如button,label)非常重要。通俗的讲,具有intrinsic content size的控件自己知道(可以计算)自己的大小,例如一个label,当你设置text,font之后,其大小是可以计算到的。关于intrinsic content size官方的解释:

Custom views typically have content that they display of which the layout system is unaware. Overriding this method allows a custom view to communicate to the layout system what size it would like to be based on its content. This intrinsic size must be independent of the content frame, because there’s no way to dynamically communicate a changed width to the layout system based on a changed height, for example.
自定义视图通常具有它们显示的内容,而布局系统不知道这些内容。重写此方法允许自定义视图根据其内容与布局系统通信它想要的大小。这个内在的大小必须独立于内容框架,因为没有方法可以根据变化的高度动态地将更改的宽度传递给布局系统。

好了,了解了intrinsic content size的概念之后,下面就重点讨论Content Hugging 和 Content Compression Resistance了。

UIView中关于Content Hugging 和 Content Compression Resistance的方法有:

1
2
3
4
5
6
7
- (UILayoutPriority)contentCompressionResistancePriorityForAxis:(UILayoutConstraintAxis)axis

- (void)setContentCompressionResistancePriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis

- (UILayoutPriority)contentHuggingPriorityForAxis:(UILayoutConstraintAxis)axis

- (void)setContentHuggingPriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis

大概的意思就是设置优先级的。

1
2
3
Hugging priority 				确定view有多大的优先级【阻止自己变大】。

Compression Resistance priority 确定有多大的优先级【阻止自己变小】。

很抽象,其实content Hugging就是要维持当前view在它的optimal size(最佳的大小)(intrinsic content size固有内容尺寸),可以想象成给view添加了一个额外的width constraint,此constraint试图保持view的size不让其变【大】:

view.width <= optimal size(最佳的大小)

1
content Hugging 在合适的大小上 不想再变大

此constraint的优先级就是通过上面的方法得到和设置的,content Hugging默认为250.

Content Compression Resistance就是要维持当前view在他的optimal size(intrinsic content size),可以想象成给view添加了一个额外的width constraint,此constraint试图保持view的size不让其变【小】:

view.width >= optimal size

此默认优先级为750.

1
Content Compression Resistance 在合适的大小上 不想再变小


代码设置

1
2
UILayoutPriority priority = 751;
[self.testLabel setContentCompressionResistancePriority:priority forAxis:UILayoutConstraintAxisVertical];

代码块写法 自动获取变量名不好使…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
UIImageView *iconImageView = ({
UIImageView *imageView = [[UIImageView alloc] init];
imageView.backgroundColor = [UIColor colorWithWhite:0.5 alpha:1.0];

NSString *path = [[NSBundle mainBundle] pathForResource:@"aaa" ofType:@"jpg"];
UIImage *image = [UIImage imageWithContentsOfFile:path];
imageView.image = image;

[self.view addSubview:imageView];

imageView;
});

self.iconImageView = iconImageView;

在里面自动获取变量名直接跳到括号外…
比如 [UIImage imageWithContentsOfFile:path]; 快捷键 取变量名 , AppCode修改 UIImageView * iconImageView 的变量名 真坑…

修改成…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
UIImageView *iconImageView = nil;
{
UIImageView *imageView = [[UIImageView alloc] init];
imageView.backgroundColor = [UIColor colorWithWhite:0.5 alpha:1.0];

NSString *path = [[NSBundle mainBundle] pathForResource:@"aaa" ofType:@"jpg"];
UIImage *image = [UIImage imageWithContentsOfFile:path];
imageView.image = image;

[self.view addSubview:imageView];
iconImageView = imageView;
}

self.iconImageView = iconImageView;

key-value-observing 建议

http://nshipster.com/key-value-observing/