是否可以創建一個UILabel子類,根據是否有足夠的空間自動更新其文本?類似於標籤可以添加橢圓的方式。動態更新基於壓縮的UILabel文本
我想創建兩個屬性preferredText
和alternateText
,並根據其可用空間量自動在兩者之間選擇標籤。所以,我可以做一些像preferredText = @"Count text: 1024"; alternateText = @"1024";
。
我看過intrinsicContentSize
當然,但我認爲應該總是返回一個基於preferredText
的值。我也考慮覆蓋systemLayoutSizeFittingSize
和systemLayoutSizeFittingSize:...
,但在自動佈局過程中從不調用這些方法。我也嘗試覆蓋layoutSubviews
,但在那個時候系統已經決定了它想要標籤有多大。改變那裏的文字會導致無限循環。
理想情況下,我想要一個可以應用於其他視圖類型的通用解決方案。例如,如果沒有足夠的空間,自定義的uibutton可能會選擇不同的圖像。
謝謝馬特。我瞭解如何計算標籤的大小。問題是,真正的哪種方法或哪些方法最適合重寫,以便a)系統知道它可以使標籤變小,並且b)一旦設置了尺寸,就可以替換文本。答案是A.似乎是'systemLayoutSizeFittingSize:...',如果'preferedText'不適合,則返回'alternateText'的大小,但在佈局過程中永遠不會調用該方法。對於b,它看起來像'layoutSubviews',但正如我所提到的,如果您在那裏更改文本,可能會導致無限循環。 – arsenius
我不太明白這個問題。如果標籤的大小不取決於其內容,那麼它必須依賴於別的東西,可能是外部約束。所以大小是絕對已知的,現在你知道要插入哪個文本(這不會改變大小)。或者,如果自動佈局帶來麻煩,請將標籤完全從自動佈局的控制中移除。 - 但是,也許最簡單的解決方案不是使用UILabel;創建一個繪製字符串的UIView很容易,現在你完全可以控制它(而UILabel,正如你發現的那樣,會做一些佈局技巧)。 – matt
這個問題與蘋果在文本太長時添加橢圓或縮小字體的方式類似。我會替換整個文本而不是省略號。我在考慮用兩個標籤來看看。 '首選'將具有較低的水平抗壓縮性,而'備用'將具有較高的阻力。然後我可以使用自動佈局將它們中的每一個固定到邊緣。在'layoutSubviews'期間,我會根據實際的框架適當地隱藏/顯示。我希望只是直接子類UILabel。 – arsenius