UGUI-使 UI 元素適應(yīng)其內(nèi)容的大小
通常,在使用矩形變換定位 UI 元素時(shí),應(yīng)手動指定其位置和大?。蛇x擇性地包括使用父矩形變換進(jìn)行拉伸的行為)。
但是,有時(shí)可能希望自動調(diào)整矩形的大小來適應(yīng) UI 元素的內(nèi)容。為此,可添加名為內(nèi)容大小適配器 (Content Size Fitter) 的組件。
適應(yīng)文本大小
為了使帶有文本組件的矩形變換適應(yīng)文本內(nèi)容,請將內(nèi)容大小適配器組件添加到具有文本組件的同一游戲?qū)ο?。然后?Horizontal Fit 和 Vertical Fit 下拉選單設(shè)置為 Preferred 設(shè)置。
工作原理
此處的工作原理是文本組件充當(dāng)布局元素,可提供有關(guān)最小大小和偏好大小的大小信息。在手動布局中,不會使用此信息。內(nèi)容大小適配器是一種布局控制器,可監(jiān)聽布局元素提供的布局信息,并根據(jù)此信息控制矩形變換的大小。
注意軸心
當(dāng) UI 元素自動調(diào)整大小來適應(yīng)其內(nèi)容時(shí),應(yīng)特別注意矩形變換的軸心。當(dāng)元素調(diào)整大小時(shí),軸心將保持在原位,因此通過設(shè)置軸心位置,可控制元素?cái)U(kuò)展或收縮的方向。例如,如果軸心位于中心,則元素將在所有方向上均勻擴(kuò)展,如果軸心位于左上角,則元素將向右和向下擴(kuò)展。
適應(yīng)具有子文本的 UI 元素的大小
如果 UI 元素(比如按鈕)具有一個背景圖像和一個帶有文本組件的子游戲?qū)ο螅@種情況下可能會希望整個 UI 元素適應(yīng)文本的大小 - 可能還需要一些填充。
為此,首先將水平布局組 (Horizontal Layout Group) 添加到 UI 元素,然后也添加內(nèi)容大小適配器。將 Horizontal Fit 和/或 Vertical Fit 設(shè)置為 Preferred 設(shè)置。此外,可使用水平布局組中的填充屬性來添加和調(diào)整填充。
為什么使用水平布局組?其實(shí),也可以是垂直布局組 (Vertical Layout Group),只要只有一個子項(xiàng),兩者的結(jié)果就是相同的。
工作原理
水平(或垂直)布局組既可用作布局控制器,也可用作布局元素。首先,布局組會監(jiān)聽該組內(nèi)的子項(xiàng)(在本示例中為子文本組件)提供的布局信息。然后,布局組將確定該組必須為多大(最小大小和偏好大?。┎拍軌虬凶禹?xiàng),并充當(dāng)布局元素來提供這些有關(guān)最小大小和偏好大小的信息。
內(nèi)容大小適配器會監(jiān)聽同一游戲?qū)ο笊系娜魏尾季衷靥峁┑牟季中畔?- 在本示例中由水平(或垂直)布局組提供。根據(jù)設(shè)置,內(nèi)容大小適配器隨后會基于此信息控制矩形變換的大小。
一旦設(shè)置了矩形變換的大小,水平(或垂直)布局組將確保根據(jù)可用空間來定位其子項(xiàng)并調(diào)整大小。請參閱有關(guān)水平布局組的頁面,詳細(xì)了解如何控制其子項(xiàng)的位置和大小。
使布局組的子項(xiàng)適應(yīng)各自的大小
如果有一個布局組(水平或垂直)并希望該組中的每個 UI 元素都適應(yīng)其各自的內(nèi)容,該怎么做?
這種情況下不能為每個子項(xiàng)添加內(nèi)容大小適配器。原因是內(nèi)容大小適配器想要控制自己的矩形變換,但父布局組也想要控制子矩形變換。因此會產(chǎn)生沖突,結(jié)果是不明確的行為。
但是,也沒有必要這樣做。父布局組已經(jīng)可以使每個子項(xiàng)適應(yīng)內(nèi)容的大小。需要做的是禁用布局組上的 Child Force Expand 開關(guān)。如果子項(xiàng)本身也是布局組,可能還需要禁用這些子項(xiàng)上的 Child Force Expand 開關(guān)。
一旦子項(xiàng)不再以靈活寬度進(jìn)行擴(kuò)展,便可使用 Child Alignment 設(shè)置在布局組中指定子項(xiàng)的對齊方式。
如果希望某些子項(xiàng)進(jìn)行擴(kuò)展以便填充額外的可用空間,而其他子項(xiàng)不擴(kuò)展,該怎么辦?向需要擴(kuò)展的子項(xiàng)添加布局元素組件并在這些布局元素上啟用 Flexible Width 或 Flexible Height 屬性,即可輕松控制此行為。父布局組仍應(yīng)禁用 Child Force Expand 開關(guān),否則所有子項(xiàng)將靈活擴(kuò)展。
工作原理
一個游戲?qū)ο罂梢杂卸鄠€組件,每個組件都提供有關(guān)最小大小、偏好大小和靈活大小的布局信息。優(yōu)先級系統(tǒng)將確定哪些值優(yōu)先于其他值。布局元素組件的優(yōu)先級高于文本、圖像和布局組組件,因此可用于覆蓋它們提供的任何布局信息值。
布局組監(jiān)聽子項(xiàng)提供的布局信息時(shí),還會考慮覆蓋的靈活大小。然后,在控制子項(xiàng)的大小時(shí),布局組不會讓子項(xiàng)的大小超過偏好大小。但是,如果布局組啟用了 Child Force Expand 選項(xiàng),則始終會使所有子項(xiàng)的靈活大小至少為 1。
更多信息
本頁面介紹了一些常見用例的解決方案。如需了解自動布局系統(tǒng)的更深入說明,請參閱?UI 自動布局頁面。