4

私は現在 Swift で開発を行っており、動的型付けで問題が発生しました。このコードを設定しました

import Foundation
import UIKit

class ExerciseController :UIViewController, UITableViewDataSource, UITableViewDelegate {

  @IBOutlet var exerciseTableView :UITableView

  override func viewDidLoad() {
    super.viewDidLoad()
  }

  override func viewWillAppear(animated: Bool)  {
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "reload", name: UIContentSizeCategoryDidChangeNotification, object: nil)
  }

  override func viewWillDisappear(animated: Bool) {
    NSNotificationCenter.defaultCenter().removeObserver(self, name: UIContentSizeCategoryDidChangeNotification, object: nil)
  }

  func reload() {
    println("reload")
  }

  func numberOfSectionsInTableView(tableView: UITableView!) -> Int {
    return 1
  }

  func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
    return 1
  }

  func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
    let cellIdentifier = "ExerciseCell"
    var cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as? UITableViewCell
    if !cell {
      cell = UITableViewCell(style: .Default, reuseIdentifier: cellIdentifier)
    }
    cell!.textLabel.text = "Hello"
    cell!.textLabel.font = UIFont.preferredFontForTextStyle(UIFontTextStyleHeadline)
    return cell
  }
}

アプリを実行し、設定アプリに移動してテキスト サイズを変更しましたが、通知セレクターが呼び出されず、理由がわかりません。この問題を解決するために事前に感謝します。すべての助けに感謝します

*以前は通知オブザーバーが viewDidiLoad と deinit に設定されていましたが、どちらも機能しませんでした

更新 #1

キーボード通知で同じことを試してみましたが、うまくいきました。これは、アプリケーションが完了時にテキスト サイズが変更されたことを認識していないことを意味します。

4

1 に答える 1

6

編集 1 Apple は私のバグ レポートを認め、別のバグ レポートとマージしました。


少しテストを行ったところ、この問題/バグは iOS 8 シミュレーターでのみ一般的であることがわかりましたUIContentSizeCategoryDidChangeNotification。他の通知は意図したとおりに機能UIContentSizeCategoryDidChangeNotificationし、iOS 7 シミュレーターで期待どおりに動作しています。レーダーにバグレポートを提出しました。近い将来、この問題を抱えている人々のためにこれが明確になることを願っています.

編集2

これは現在修正されているようです。さらに、 Big Nerd Ranch のこのライブラリは、動的型を設定するプロセス全体を本当に簡単にします。

于 2014-06-18T08:17:44.583 に答える