簡體   English   中英

UILabel重繪視圖。 如何避免這種行為?

[英]UILabel redraws the view. How to avoid this behavior?

我有一個帶三個子視圖的viewController。 我也使用AutoLayout和size類。 這些視圖已設置動畫,並更改了位置和大小。 動畫之后,我更新了標簽,但是整個視圖被重繪,因此每個視圖都處於其初始位置和大小。 這不應該發生。 如蘋果開發人員參考中所述:

“ UILabel類的默認內容模式是UIViewContentModeRedraw。此模式使視圖每次在其邊界矩形更改時都重新繪制其內容。您可以通過修改類的繼承的contentMode屬性來更改此模式。”

在我看來,如何修改-contentMode-以更新該標簽並使視圖保持原樣仍然是不清楚的。 誰能給我一個線索? 提前致謝。

聽起來您可能正在使用自動布局來布局視圖(例如,通過IB中的約束),但是隨后您直接為動畫操縱了視圖的frame -是這種情況嗎? 如果是這樣,則應改為使約束的constant量值或子視圖的transform動畫。

如果直接在使用自動布局的視圖中操作框架,則下次系統對視圖進行布局時(例如,在標簽文本更改后),更改將被覆蓋。

您有3種選擇來克服問題-

  1. 停止在Storyboard / Xib中使用AutoLayout。

    不是一個很好的解決方案

  2. 對對子視圖的transform屬性的更改進行動畫處理。 例如myView.transform = CGAffineTransformMakeScale(2.0,2.0);

    對於演示和解雇動畫很有用,但在iOS 8.0之前的版本中將AutoLayout和transforms混合使用時會遇到一些問題

  3. 為需要在動畫中更改的約束添加IBOutlets。 對這些約束的constant數值進行動畫處理。

    最魯棒的方法,但是可以為復雜的動畫帶來很多特性和代碼

嘗試contentMode = UIViewContentModeCenter。 這樣可以防止您看到重繪。 盡管那可能不是您想要的contentMode。

選項2是使用CATextLayer繪制標簽。 它將通過動畫很好地調整大小,但是要進行大量設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM