iOS中View的位置和大小

frame bounds center

frame bounds center是View的屬性睬关,定義了View的位置和大小澎语。
frame bounds是一個(gè)結(jié)構(gòu)體肩祥,包含位置和帶下坞嘀。Center是一個(gè)坐標(biāo)郁油。
給一個(gè)View設(shè)置frame時(shí)本股,以父View的

struct CGRect // frame和bounds都屬于這一類型
 {
  CGPoint origin; //坐標(biāo)位置
  CGSize size;//形狀大小
};
struct CGPoint  // 坐標(biāo)位置中包含x坐標(biāo)和y坐標(biāo)
{
  CGFloat x;
  CGFloat y;
};
struct CGSize// 形狀大小指的是矩形的長(zhǎng)和寬
 {
  CGFloat width;
  CGFloat height;
};

frame

frame設(shè)置了每個(gè)View相對(duì)于父View頂點(diǎn)的位置和自身的大小攀痊。

    UIView *backView = [[UIView alloc] initWithFrame:CGRectMake(50, 100, 250, 250)];
    backView.backgroundColor = [UIColor redColor];
    [self.view addSubview:backView];
    
    UIView *midView = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 150, 150)];
    backView.backgroundColor = [UIColor greenColor];
    [backView addSubview:midView];
    
    UIView *frontView = [[UIView alloc] initWithFrame:CGRectMake(35, 35, 80, 80)];
    frontView.backgroundColor = [UIColor blueColor];
    [midView addSubview:frontView];
frame示例

bounds

子View的frame會(huì)以父View的頂點(diǎn)為原點(diǎn),建立坐標(biāo)系拄显,計(jì)算子View的位置苟径。
當(dāng)給一個(gè)View設(shè)置bounds時(shí),會(huì)把自己當(dāng)作一個(gè)容器躬审。設(shè)置View的bounds棘街,會(huì)改變以自身定點(diǎn)的位置。
如下代承边。backView.bounds = CGRectMake(50, 50, 250, 250)表示對(duì)于midView來(lái)說(shuō)遭殉,backView的左上角坐標(biāo)變?yōu)椋?0,50)博助。因此险污,midView和backView的左上角對(duì)齊。

    UIView *backView = [[UIView alloc] initWithFrame:CGRectMake(50, 100, 250, 250)];
    backView.backgroundColor = [UIColor redColor];
    backView.bounds = CGRectMake(50, 50, 250, 250);
    [self.view addSubview:backView];
    
    UIView *midView = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 150, 150)];
    midView.backgroundColor = [UIColor greenColor];
    [backView addSubview:midView];
    
    UIView *frontView = [[UIView alloc] initWithFrame:CGRectMake(35, 35, 80, 80)];
    frontView.backgroundColor = [UIColor blueColor];
    [midView addSubview:frontView];

因此上面代碼執(zhí)行的結(jié)果是


bounds示例

center

center.x = frame.origin.x + frame.size.width / 2
center.y = frame.origin.y + frame.size.height / 2

總結(jié)

frame設(shè)置自身相對(duì)于父View的位置和自身大小富岳。
bounds設(shè)置子View的位置和自身的大小


frame和bounds的關(guān)系.png

frame和center的關(guān)系.png

bounds和center的關(guān)系.png

contentSize contentInset contentOffset

contentSize contentInset contentOffset是scrollView的三個(gè)屬性

1.contentSize

The size of the content view. 這個(gè)size表示滾動(dòng)視圖可以滾動(dòng)的大小蛔糯,也就是scrollView內(nèi)容的大小。如果scrollView.contentSize大于scrollView.frame.size窖式,則有滑動(dòng)效果蚁飒。小于或等于滾動(dòng)視圖的frame.size,這時(shí)候滾動(dòng)視圖是不可以滾動(dòng)的萝喘,連橡皮筋效果都沒(méi)有淮逻。

假如frame = (0 ,0 ,320 ,480) contentSize = (640 ,480),代表你的scrollview可以橫向滾動(dòng)320的寬度蜒灰。


contentSize
    CGFloat scrollViewWidth = 300;
    CGFloat scrollViewHeight = 500;
    CGFloat pageWidth = 200;
    CGFloat pageHeight = 500;
    
    UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, pageWidth, pageHeight)];
    view1.backgroundColor = [UIColor redColor];
    UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(pageWidth, 0, pageWidth, pageHeight)];
    view2.backgroundColor = [UIColor greenColor];
    UIView *view3 = [[UIView alloc] initWithFrame:CGRectMake(pageWidth * 2, 0, pageWidth, pageHeight)];
    view3.backgroundColor = [UIColor blueColor];
    
    self.scrollview = [[UIScrollView alloc] initWithFrame:CGRectMake((self.view.frame.size.width - scrollViewWidth) / 2, 50, scrollViewWidth, scrollViewHeight)];
    self.scrollview.scrollEnabled = YES;
    self.scrollview.pagingEnabled = NO;
    self.scrollview.contentSize = CGSizeMake(3 * pageWidth, pageHeight);
    [self.scrollview addSubview:view1];
    [self.scrollview addSubview:view2];
    [self.scrollview addSubview:view3];
    [self.view addSubview:self.scrollview];
contentSize示例

2.contentOffset

contentOffset是scrollView的contentView的頂點(diǎn)相對(duì)于frame定點(diǎn)的偏移量弦蹂。

    CGFloat scrollViewWidth = 300;
    CGFloat scrollViewHeight = 500;
    CGFloat pageWidth = 200;
    CGFloat pageHeight = 500;
    
    UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, pageWidth, pageHeight)];
    view1.backgroundColor = [UIColor redColor];
    UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(pageWidth, 0, pageWidth, pageHeight)];
    view2.backgroundColor = [UIColor greenColor];
    UIView *view3 = [[UIView alloc] initWithFrame:CGRectMake(pageWidth * 2, 0, pageWidth, pageHeight)];
    view3.backgroundColor = [UIColor blueColor];
    
    self.scrollview = [[UIScrollView alloc] initWithFrame:CGRectMake((self.view.frame.size.width - scrollViewWidth) / 2, 50, scrollViewWidth, scrollViewHeight)];
    self.scrollview.contentOffset = CGPointMake(pageWidth, 0);
    self.scrollview.scrollEnabled = YES;
    self.scrollview.pagingEnabled = NO;
    self.scrollview.contentSize = CGSizeMake(3 * pageWidth, pageHeight);
    [self.scrollview addSubview:view1];
    [self.scrollview addSubview:view2];
    [self.scrollview addSubview:view3];
    [self.view addSubview:self.scrollview];
contentOffset示例

3.contentInset

可以看做是給contentView四周設(shè)了一圈范圍肩碟,top,left正數(shù)增大其范圍强窖,top,left負(fù)數(shù)縮小其范圍)畫(huà)個(gè)圖可能更容易理解

    CGFloat scrollViewWidth = 300;
    CGFloat scrollViewHeight = 500;
    CGFloat pageWidth = 200;
    CGFloat pageHeight = 500;
    
    UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, pageWidth, pageHeight)];
    view1.backgroundColor = [UIColor redColor];
    UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(pageWidth, 0, pageWidth, pageHeight)];
    view2.backgroundColor = [UIColor greenColor];
    UIView *view3 = [[UIView alloc] initWithFrame:CGRectMake(pageWidth * 2, 0, pageWidth, pageHeight)];
    view3.backgroundColor = [UIColor blueColor];
    
    self.scrollview = [[UIScrollView alloc] initWithFrame:CGRectMake((self.view.frame.size.width - scrollViewWidth) / 2, 50, scrollViewWidth, scrollViewHeight)];
    self.scrollview.contentInset = UIEdgeInsetsMake(30, 40, 50, 60);// 相當(dāng)于可滾動(dòng)區(qū)域上邊增加30,左邊增加40削祈,底邊增加50翅溺,右邊增加60
    // 可滾動(dòng)范圍是 -30 -> contentSize.height + 50   -40 -> contentSize.width + 60
    self.scrollview.scrollEnabled = YES;
    self.scrollview.pagingEnabled = NO;
    self.scrollview.contentSize = CGSizeMake(3 * pageWidth, pageHeight);
    [self.scrollview addSubview:view1];
    [self.scrollview addSubview:view2];
    [self.scrollview addSubview:view3];
    [self.view addSubview:self.scrollview];
contentInset示例
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市髓抑,隨后出現(xiàn)的幾起案子咙崎,更是在濱河造成了極大的恐慌,老刑警劉巖吨拍,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褪猛,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡羹饰,警方通過(guò)查閱死者的電腦和手機(jī)伊滋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門碳却,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人笑旺,你說(shuō)我怎么就攤上這事昼浦。” “怎么了筒主?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵关噪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我乌妙,道長(zhǎng)使兔,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任藤韵,我火速辦了婚禮火诸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘荠察。我一直安慰自己置蜀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布悉盆。 她就那樣靜靜地躺著盯荤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪焕盟。 梳的紋絲不亂的頭發(fā)上秋秤,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音脚翘,去河邊找鬼灼卢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛来农,可吹牛的內(nèi)容都是我干的鞋真。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼沃于,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼涩咖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起繁莹,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤檩互,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后咨演,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體闸昨,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了饵较。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溉跃。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖告抄,靈堂內(nèi)的尸體忽然破棺而出撰茎,到底是詐尸還是另有隱情,我是刑警寧澤打洼,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布龄糊,位于F島的核電站,受9級(jí)特大地震影響募疮,放射性物質(zhì)發(fā)生泄漏炫惩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一阿浓、第九天 我趴在偏房一處隱蔽的房頂上張望他嚷。 院中可真熱鬧,春花似錦芭毙、人聲如沸筋蓖。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)粘咖。三九已至,卻和暖如春侈百,著一層夾襖步出監(jiān)牢的瞬間瓮下,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工钝域, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留讽坏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓例证,卻偏偏與公主長(zhǎng)得像路呜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子战虏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容