一阔挠、首先我們舉一個(gè)小栗子:
1.代碼中先設(shè)置了size镀层,然后再設(shè)置了center
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIView *temp = [[UIView alloc] init];
temp.backgroundColor = [UIColor redColor];
[self.view addSubview:temp];
// center 和 size 的設(shè)置的順序
// 設(shè)置size
CGRect frame = temp.frame;
frame.size = CGSizeMake(100, 100);
temp.frame = frame;
// 設(shè)置center
temp.center = CGPointMake(self.view.frame.size.width * 0.5, self.view.frame.size.height * 0.5);
}
@end
運(yùn)行結(jié)果如下:
可以看出跟我們預(yù)想的是一樣的嘉汰,100*100的紅色view在正中間丹禀。
然后我們?cè)兕嵉瓜马樞颉?/p>
2.先設(shè)置center,再設(shè)置size:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIView *temp = [[UIView alloc] init];
temp.backgroundColor = [UIColor redColor];
[self.view addSubview:temp];
// center 和 size 的設(shè)置的順序
// 設(shè)置center
temp.center = CGPointMake(self.view.frame.size.width * 0.5, self.view.frame.size.height * 0.5);
// 設(shè)置size
CGRect frame = temp.frame;
frame.size = CGSizeMake(100, 100);
temp.frame = frame;
}
@end
運(yùn)行結(jié)果如下:
這次的運(yùn)行結(jié)果卻跟上面的結(jié)果不同双泪。
什么原因呢?
二密似、問題解釋:
我們看上面的代碼中:
UIView *temp = [[UIView alloc] init];
temp.backgroundColor = [UIColor redColor];
[self.view addSubview:temp];
我們只是創(chuàng)建了名為temp的紅色view焙矛,放到了ViewController中,沒有設(shè)置他的X残腌、Y村斟、W、H抛猫。
也就是說temp現(xiàn)在是一個(gè)“點(diǎn)”蟆盹,而且這個(gè)點(diǎn)在屏幕左上角,我們是看不到的闺金。
1.先size日缨,后center:
在創(chuàng)建了view之后,我們先給了他size掖看,也就是說他的寬高是確定了的(100*100)匣距,然后與此同時(shí)面哥,他是在左上角的(這也間接證明了上文粗體字),并且center毅待,即中心點(diǎn)尚卫,便出現(xiàn)了。
然后我們通過center尸红,通過控制中心點(diǎn)吱涉,來控制temp的位置,這樣很明顯外里,就可以實(shí)現(xiàn)temp出現(xiàn)在屏幕正中間怎爵。
2.先center,后size:
在創(chuàng)建了temp之后盅蝗,我們需要知道鳖链,他是一個(gè)“點(diǎn)”,這個(gè)“點(diǎn)”墩莫,既是左上角的點(diǎn)芙委,又是temp的中心點(diǎn)
然后我們通過控制這個(gè)看不見的點(diǎn)的“中心點(diǎn)”,來控制它的位置狂秦。
然后到現(xiàn)在為止灌侣,這個(gè)點(diǎn)在正中間,即裂问,center已經(jīng)設(shè)置完畢侧啼,在正中間,那么temp的左上角也在正中間(都是同一個(gè)點(diǎn))堪簿。
然后我們?cè)僭O(shè)置寬高的時(shí)候慨菱,就是以 temp左上角/屏幕中心點(diǎn), 為(0戴甩,0)符喝,這樣當(dāng)temp寬高為100的時(shí)候,temp的位置就偏移了甜孤,我們可以發(fā)現(xiàn)协饲,temp的左上角在屏幕正中間。如圖:
三缴川、總結(jié):
所以到現(xiàn)在茉稠,大家應(yīng)該明白了其問題所在。
那么解決辦法也很簡單:
先設(shè)置size把夸,即寬高而线,再通過設(shè)置center來設(shè)置其位置
說的很啰嗦,但個(gè)人覺得挺詳細(xì)的,希望有錯(cuò)誤之處膀篮、不足之處大家可以提出來嘹狞,我們共同進(jìn)步哈~~