我試圖編程創建具有兩個子視圖的UILabel的容器視圖,它們的行爲如下:動態的UILabel帶比例寬度和文本驅動高度
- 容器寬度被固定到它的父;其高度被限制以適合
- 標籤被水平地佈置,與它們(8分)
- 之間的標準間距的左標籤寬度是容器
- 右標籤寬度填充的寬度的25%的標籤可用空間減去標準水平間距
- 長文字應該在字邊界處被打破,流過多條線;兩個標籤必須垂直增長以容納長文字
我已經定義了標籤numberOfLines = 0
和lineBreakMode = NSLineBreakByWordWrapping
。
請注意,容器的大小是完全動態的;其寬度由其超視圖確定,而其高度由其子視圖(標籤)確定。標籤的大小也是動態的;它們的寬度與容器寬度成正比,它們的高度取決於文本的長度。
我已經能夠實現上面的所有內容,除了最後一項,具有以下約束(僞代碼)。 A是左邊的標籤,B是右邊的。
- A.top == container.top
- B.top == container.top
- A.leading = container.leading
- A.trailing == B.leading - 8
- B.trailing == container.trailing
- A == 0.25 * container.width
- container.height> = A.height
- container.height> = B.height
最後2個約束條件旨在將容器拉伸以適應標籤的高度,但佈局引擎似乎忽略了標籤可能爲多行的事實。也就是說,無論文本的長度如何,我都會顯示一行。
那麼我需要添加/修改/刪除哪些約束條件才能實現上述全部行爲?
我會建議作出這一在它定義一個非常簡單的只有一個視圖的示範項目,並將其張貼到Dropbox的(或當量)。如果你能得到一些積分,那麼50的獎金也會在這裏得到很多關注。有兩個想法被拋棄 - 您可以要求標籤根據其當前內容調整大小(或詢問所需的大小),您可以告訴自動佈局系統重新佈局,並且如果您實現文本代表,您將知道當文字改變時。我今天沒有使用autolayout的經驗,但我正在積極地閱讀它。 –
我正在開發MonoTouch。我不認爲C#演示會對大多數自動佈局大師有幫助。 :-( – lencharest