2015-06-29 73 views
0

我顯示倒計時計時器使用一個UILabel這樣的:的UILabel顯示倒計時文本

func updateTime() { 
      var elapsedTime: NSTimeInterval = startDate!.timeIntervalSinceNow 
      var daysFloat = floor(elapsedTime/24/60/60) 
      var hoursLeftFloat = floor((elapsedTime) - (daysFloat*86400)) 
      var hoursFloat = floor(hoursLeftFloat/3600) 
      var minutesLeftFloat = floor((hoursLeftFloat) - (hoursFloat*3600)) 
      var minutesFloat = floor(minutesLeftFloat/60) 
      var remainingSeconds = elapsedTime % 60 

      var daysInt = Int(daysFloat) 
      var hoursInt = Int(hoursFloat) 
      var minutesInt = Int(minutesFloat) 
      var remainingSecondsInt = Int(remainingSeconds) 

      var startsIn = NSMutableAttributedString() 
      var days = NSMutableAttributedString() 
      var hours = NSMutableAttributedString() 
      var minutes = NSMutableAttributedString() 
      var seconds = NSMutableAttributedString() 
      var dot = NSMutableAttributedString() 
      startsIn = NSMutableAttributedString(string: "STARTS IN: ", attributes: [NSFontAttributeName:UIFont(name: "Tungsten-Semibold", size: 37.0)!, NSForegroundColorAttributeName:color]) 
      days = NSMutableAttributedString(string: String(format: "%02d", daysInt) + " DAYS", attributes: [NSFontAttributeName:UIFont(name: "Tungsten-Semibold", size: 37.0)!, NSForegroundColorAttributeName:UIColor.blackColor()]) 
      hours = NSMutableAttributedString(string: String(format: "%02d", hoursInt) + " HRS", attributes: [NSFontAttributeName:UIFont(name: "Tungsten-Semibold", size: 37.0)!, NSForegroundColorAttributeName:UIColor.blackColor()]) 
      minutes = NSMutableAttributedString(string: String(format: "%02d", minutesInt) + " MIN", attributes: [NSFontAttributeName:UIFont(name: "Tungsten-Semibold", size: 37.0)!, NSForegroundColorAttributeName:UIColor.blackColor()]) 
      seconds = NSMutableAttributedString(string: String(format: "%02d", remainingSecondsInt) + " SEC", attributes: [NSFontAttributeName:UIFont(name: "Tungsten-Semibold", size: 37.0)!, NSForegroundColorAttributeName:UIColor.blackColor()]) 
      dot = NSMutableAttributedString(string: " . ", attributes: [NSFontAttributeName:UIFont(name: "Tungsten-Semibold", size: 39.0)!, NSForegroundColorAttributeName:UIColor.lightGrayColor()]) 

      var countdownText = NSMutableAttributedString() 
      countdownText.appendAttributedString(startsIn) 
      countdownText.appendAttributedString(days) 
      countdownText.appendAttributedString(dot) 
      countdownText.appendAttributedString(hours) 
      countdownText.appendAttributedString(dot) 
      countdownText.appendAttributedString(minutes) 
      countdownText.appendAttributedString(dot) 
      countdownText.appendAttributedString(seconds) 
      countdownLabel.attributedText = countdownText 
    } 

我有我的UILabel啓用自動收縮,使該字體將縮小,右看看上的所有設備。我看到的問題是,某些秒和/或分鐘會導致字體大小跳躍,並且它會看起來很尷尬,標籤文本在一秒鐘內暫時變大,然後在下一秒回到較小的尺寸。我怎樣才能防止字體大小跳過我的標籤和倒數計時器?

+0

爲什麼不使用timeIntervalSinceNow? –

+0

良好的通話。更新。 – codeman

+0

你應該看看我的答案,iOS必須更改字體大小的原因是因爲您沒有使用等寬字體:使用相同的字體大小像44:44這樣的文本需要更多的空間來顯示,而不是像文本一樣11:11,iOS調整字體大小以顯示文字。您的主要問題不是自動縮小,而是您的字體不是等寬字體。 –

回答

0

當寬度不足以顯示整個字符串時,iOS自動收縮。所以,不要修剪它,字符串變小,直到最小比例因子/字體大小。

所以這取決於標籤的寬度。如果您通過自動佈局設置寬度,並且標籤無法展開以適應其內容,那麼在不足時不會縮小字體大小。如果您將其展開以適應內容,則該標籤將始終嘗試顯示內容而不縮小。

1

你應該使用固定寬度像索拉,快遞,幻覺記憶國界單,信紙哥特式,解放單聲道,摩納哥「等寬」字體...

https://en.wikipedia.org/wiki/Monospaced_font

你的問題是,與非固定寬字體的一些數字將比其他數字更大。


如果您的字體是強加的,您需要「手動」施加字體大小。 你可能會試圖掩飾你的UILabel,設置儘可能多的字符串如:

STARTS IN: 44 DAYS 44 HRS 44 MIN ... (assuming 4 is the widest number with your font) 

然後檢索使用的字體大小,迫使你的應用程序使用。在這一點禁用自動縮混是不必要的:使用計算的字體大小標籤應該始終適合。


是你的字體爲必填字級還是爲了全部字詞?你也可以爲數字使用不同的(等寬字體)字體,並保留其餘的字體。

+0

這是有道理的,但不幸的是我的要求是我使用的特定字體。 – codeman

0

還要檢查您是否打開或關閉了AutoShrink

AutoShrink

從理論上講,iOS的,只能減小字體大小在額外的文本擠,如果這設置爲「固定字體大小」。