UIEdgeInsets用法

閱讀時間約 5 分鐘

UIEdgeInsets 是一個結構體,用來表示矩形的邊距。它通常在視圖佈局中使用,用於修改視圖的框架(frame)。邊距值可以是正數或負數,這會對矩形的大小產生不同的影響。

UIEdgeInsets 結構體

UIEdgeInsets 結構體包含四個屬性:

  • top:矩形頂部的邊距
  • left:矩形左側的邊距
  • bottom:矩形底部的邊距
  • right:矩形右側的邊距

正值和負值的影響

  • 正值:正值會使矩形縮小,即向內縮進指定的邊距值。例如,如果你設置 top 為 10,矩形的頂部會向下移動 10 點,縮小矩形的高度。
  • 負值:負值會使矩形擴大,即向外擴展指定的邊距值。例如,如果你設置 top 為 -10,矩形的頂部會向上移動 10 點,增加矩形的高度。
  • 正值和負值的影響

示例

假設你有一個矩形,其初始框架是 (x: 0, y: 0, width: 100, height: 100)。

使用正值的邊距

let insets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
let rect = CGRect(x: 0, y: 0, width: 100, height: 100)
let insetRect = rect.inset(by: insets)

結果:

  • insetRect 的框架會是 (x: 10, y: 10, width: 80, height: 80)。
  • 矩形的每一邊都向內縮進了 10 點,因此寬度和高度都減少了 20 點。

使用負值的邊距

let insets = UIEdgeInsets(top: -10, left: -10, bottom: -10, right: -10)
let rect = CGRect(x: 0, y: 0, width: 100, height: 100)
let insetRect = rect.inset(by: insets)

結果:

  • insetRect 的框架會是 (x: -10, y: -10, width: 120, height: 120)。
  • 矩形的每一邊都向外擴展了 10 點,因此寬度和高度都增加了 20 點。

在視圖佈局中的應用

UIEdgeInsets 通常在設置視圖的邊距(例如,內容邊距或安全區域邊距)時使用。例如:

let button = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 50))
button.contentEdgeInsets = UIEdgeInsets(top: 10, left: 20, bottom: 10, right: 20)

這樣設置後,按鈕的內容(如標題或圖片)會有 10 點的頂部和底部邊距,以及 20 點的左右邊距。

  • 負值:負值會使矩形擴大,即向外擴展指定的邊距值。例如,如果你設置 top 為 -10,矩形的頂部會向上移動 10 點,增加矩形的高度。

正值是縮小?負值是擴大?

raw-image

正值的邊距

當你給 UIEdgeInsets 設置正值時,這些值表示從矩形的邊緣向內縮進的距離。換句話說,正值表示你要從矩形的每一個邊緣向內移動,這樣就會使矩形變小。

視覺化理解

假設你有一個初始矩形,框架為 (x: 0, y: 0, width: 100, height: 100)

正值邊距的應用

如果你設置 UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10),這意味著:

  • 頂部:矩形的頂部邊緣向下移動 10 點。
  • 左側:矩形的左邊邊緣向右移動 10 點。
  • 底部:矩形的底部邊緣向上移動 10 點。
  • 右側:矩形的右邊邊緣向左移動 10 點。

這樣一來,矩形的每一邊都向內縮進了 10 點,導致矩形的寬度和高度都減少了 20 點(每邊 10 點,共兩邊)。

結果,新的矩形框架變為 (x: 10, y: 10, width: 80, height: 80)

總結

正值使矩形縮小的原因在於,這些值表示從矩形的邊緣向內縮進的距離。這樣做會減少矩形的總寬度和高度,使其變得更小。

實際應用

把button的圖片從預設的置左改成置右

 extension UIButton {

    func configRightImage() {

        self.titleEdgeInsets = UIEdgeInsets(top: 0, left: -(self.imageView?.frame.size.width ?? 0), bottom: 0, right: self.imageView?.frame.size.width ?? 0)

        self.imageEdgeInsets = UIEdgeInsets(top: 0, left: (self.titleLabel?.frame.size.width ?? 0) - 10, bottom: 0, right: -(self.titleLabel?.frame.size.width ?? 0))

    }

}
6會員
32內容數
紀錄iOS開發上遇到的問題或是一些流程筆記。主要都是Swift。
留言0
查看全部
發表第一個留言支持創作者!
Michelle Chen的沙龍 的其他內容
iOS常用的Design Pattern
閱讀時間約 10 分鐘
iOS開發:選取&顯示GIF的方法
閱讀時間約 8 分鐘
Swift字串的比較
閱讀時間約 4 分鐘
iOS15 UIButton新外觀設定
閱讀時間約 8 分鐘
你可能也想看
創作者要怎麼好好休息 + 避免工作過量?《黑貓創作報#4》午安,最近累不累? 這篇不是虛假的關心。而是《黑貓創作報》發行以來可能最重要的一篇。 是的,我們這篇講怎麼補充能量,也就是怎麼休息。
Thumbnail
avatar
黑貓老師
2024-06-29
防曬產品係數測試報告彙整(2024年)從2014年起,自己對於市售防曬產品的效能產生了濃厚的興趣。因為當時候發現不少產品的防曬係數其實標示是有問題的,像是原本應該是人體測試的SPF與PA數值,實際上沒有做,只用機器測試的數據來充當,但這兩者卻有很大的差異。像是防曬係數其實有強度、廣度與平均度三個面向需要一起判斷,但多數廠商並沒有完整標示
Thumbnail
avatar
邱品齊皮膚科醫師
2023-04-27
《用法國Hermès(愛馬仕)精品包,與TOEFL八大行星學術英文產生知識串聯點》在TOEFL(托福)閱讀及寫作考題中,經常出現與「天文學」相關的學術英文考題。無此類「科普知識」的考生,可以從已知中文常識,例如法國精品名牌包Hermes、美國在2010年結束營運的釷星汽車(Saturn)等有趣常識,f輕鬆學銀河系八大行星英文詞彙,
avatar
Jenny Hsu
2024-04-15
日文被動句用法比較本文探討了日文中被動句的不同使用方式,並詳細闡述了這些結構的含義和使用方法。
Thumbnail
avatar
yihsuan76
2024-04-14
《最高學以致用法》-輸出遠比你想得還重要這本書探討了輸出對於改變真實世界的重要性,作者著重於生活中的實踐,以及腦科學的概念,並鼓勵讀者擁有輸出的勇氣。
Thumbnail
avatar
波夏
2024-04-12
理想的用法。透過有限資源與Vision無限的矛盾,配合高速運轉的大腦建立出墊腳石,再善用保護好心地自然形成階梯。 理想就該這麼用。
avatar
始力拼達人
2024-01-18
SUMIF的隱藏用法,多範圍資料統計 SUMIF是EXCEL中一個超級實用的統計函數,他可以依據指定的關鍵字進行加總。 SUMIF有條件加總 函數說明=SUMIF(條件範圍,條件,加總範圍) 但如果遇到很多個資料範圍,大多數的人就會使用很多個SUMIF計算後再相加,如下範例所示。 其實這樣多範圍的資料不需要3個SUMIF,
Thumbnail
avatar
效率職人
2024-01-15
《三千圓的用法》日本理財縮影理財大概是每個人都關心的話題,尤其一句著名廣告詞「你不理財.財不理你」更是把理財的重要性講得再貼切不過! 故事內容其實只圍繞在一個家庭:73歲的奶奶、55歲的媽媽、29歲已婚育有一女的姊姊以及24歲剛出社會不久的OL。 這設定很有意思,理財從學生時代(助學貸款開始),一直到73歲只要還有
Thumbnail
avatar
陳小玉
2024-01-01
being用法→ 你最矛盾的關係是最有毒的being用法→ 你最矛盾的關係是最有毒的
avatar
郭小貞
2023-12-09
ing用法:紐約時報專欄文章(Who would want to be a chief executive? 5/14Who would want to be a chief executive? 誰想成為執行長? 取材自紐約時報:By Ravi Mattu / Published May 14, 2023 / Updated June 9, 2023 ing應用分析
avatar
郭小貞
2023-11-15
論「迎來」的用法最近看到愈來愈多台灣人寫文章,會用「迎來」這個詞;但這個詞真的有點被濫用;姑且不論這個詞是中國用語,撇開這個不提,「迎來」都可以換成更好的說法。
avatar
施典志 Tenz
2021-04-20