由于用UIButton这个属性做过一些东西,但是对它的规律始终不太了解,虽然苹果官方文档的解释大体上可以理解为,这个属性设置的是内边距,更通俗点说,是规定,Button向内的多少区域其它控件是不能进入的。但是总存在一些奇怪的现象,所以我做了个Demo得出下面的规律。先看demo。可以下载自己尝试。
再来研究水平方向,我以为水平方向也如此。但是并非如此,水平方向是不会相互作用的,如果水平两个方向的推进会将原来的Label进行压缩,但是Label的面积不会变,也就是说给Label留下的宽度如果小于Label的宽度,那么Label就会被压成这个宽度,然后会变长,所以当我们水平方向上压缩到0时候,Label就会不见了,因为此时Label相当于无限的长,无限的细致。就算水平某一方推进的已经覆盖掉了另外一方,Label还是会不存在。因为此时宽度是无限趋向于0
- (void)viewDidLoad { [super viewDidLoad]; NSLog(@"before setting insets%@", NSStringFromCGRect(self.button.frame)); //self.button.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 71, 10); [self.button setTitle:@"testestes" forState:UIControlStateNormal]; self.button.titleLabel.numberOfLines = 0; self.button.titleLabel.backgroundColor = [UIColor blueColor]; self.button.frame = CGRectMake(198, 285, 44, 71); self.button.backgroundColor = [UIColor redColor]; [self.button layoutIfNeeded]; NSLog(@"after setting titleLabel's frame = %@", NSStringFromCGRect(self.button.titleLabel.frame)); //self.button.contentEdgeInsets = UIEdgeInsetsMake(0, 22, 0,21); // 研究水平方向测试1 //self.button.contentEdgeInsets = UIEdgeInsetsMake(0, 21, 0,21); // 研究水平方向测试2 //self.button.contentEdgeInsets = UIEdgeInsetsMake(0, 20, 0,21); // 研究水平方向测试3 // self.button.contentEdgeInsets = UIEdgeInsetsMake(20.5, 0, 30.5,0); // 研究竖直方向测试2 [self.button layoutIfNeeded]; NSLog(@"after setting insets titleLabel's frame = %@", NSStringFromCGRect(self.button.titleLabel.frame)); NSLog(@"after setting insets%@", NSStringFromCGRect(self.button.frame)); // Do any additional setup after loading the view, typically from a nib. */}
当UIButton的宽高不满足上面的情况时候
新闻热点
疑难解答