国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

關(guān)于UIButton中的ContentEdgeInsets的深入研究

2019-11-14 18:53:50
字體:
供稿:網(wǎng)友

UIButton的contentEdgeInsets屬性的深入研究

  • 由于用UIButton這個屬性做過一些東西,但是對它的規(guī)律始終不太了解,雖然蘋果官方文檔的解釋大體上可以理解為,這個屬性設(shè)置的是內(nèi)邊距,更通俗點(diǎn)說,是規(guī)定,Button向內(nèi)的多少區(qū)域其它控件是不能進(jìn)入的。但是總存在一些奇怪的現(xiàn)象,所以我做了個Demo得出下面的規(guī)律。先看demo。可以下載自己嘗試。

  • 我們先研究豎直方向上的,也就是頂部和底部向內(nèi)推這個方向。代碼如下,我們先在StoryBoard上創(chuàng)建一個Button然后, 設(shè)置Button上的文字,并讓這個label自動換行,可以發(fā)現(xiàn)一開始Label的frame = {{3, 15}, {38, 41}}.然后我們打開豎直方向上的注釋, 會發(fā)現(xiàn)下面比上面多推了10個單位, 而且這時候20.5 + 30.5 + 41大于Button的高度71的,那么你估計出Label的Y值了么,我嘗試了很多出數(shù)據(jù),得出了規(guī)律,此時Label是向上移動5給單位。也就是所處位置是{3, 10}.也就說,Label在豎直方向上的位置,取決于上下內(nèi)邊距之差的絕對值乘以0.5。至于是原來y值加上還是減去, 這要看偏向父空那一邊,如果是底部往上推更多,那就是減去。
  • 再來研究水平方向,我以為水平方向也如此。但是并非如此,水平方向是不會相互作用的,如果水平兩個方向的推進(jìn)會將原來的Label進(jìn)行壓縮,但是Label的面積不會變,也就是說給Label留下的寬度如果小于Label的寬度,那么Label就會被壓成這個寬度,然后會變長,所以當(dāng)我們水平方向上壓縮到0時候,Label就會不見了,因為此時Label相當(dāng)于無限的長,無限的細(xì)致。就算水平某一方推進(jìn)的已經(jīng)覆蓋掉了另外一方,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.     */}
  • 總結(jié)(兩點(diǎn)):
  • UIButton設(shè)置內(nèi)邊距的時候,內(nèi)邊距 + 寬 <= UIButton的寬或者內(nèi)邊距 + 高<= UIButton。那么是沒有問題的。Label的位置是不會變化的。
  • 當(dāng)UIButton的寬高不滿足上面的情況時候

    • 豎直方向UILabel是硬的,水平方向是軟的。
    • 豎直方向移動多少, 取決于上下內(nèi)邊距之差的絕對值。
    • 水平方向的UILabel的寬度取決于所留空間是否夠大于UILabel的寬。如果是,UILabel寬不會變, 如果不是的話,UILabel的寬就等于所留的寬, 高度于文字大小有關(guān),如果寬度為擠壓寬度且不為零(擠壓寬度的意思是, 不是原來的寬, 是被擠壓過的寬),那么X的坐標(biāo)就是左邊推進(jìn)的高度。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 汕头市| 弋阳县| 石河子市| 集贤县| 东辽县| 西平县| 浪卡子县| 济阳县| 衡阳县| 天水市| 海宁市| 合川市| 屏东市| 老河口市| 邛崃市| 罗平县| 道孚县| 威宁| 天水市| 海安县| 友谊县| 白玉县| 江源县| 西畴县| 鄄城县| 本溪市| 丹凤县| 木兰县| 资兴市| 淮阳县| 祁连县| 宣武区| 南京市| 嘉定区| 六安市| 文水县| 潮安县| 吴旗县| 高邮市| 阿坝县| 郁南县|