2016-08-02 81 views
2

我有一個基於Sprite Kit的遊戲,在一個場景中使用UIView,我這樣做是爲了能夠利用UITableViewController來呈現遊戲設置屏幕。我遇到的困難是,當用戶將他們的iPad系統可訪問性設置設置爲使用(額外)大型類型時,UITableView中的文本對於單元格來說太大,並且看起來很傻。我想要做的是直接禁用應用程序中的動態類型,以便它始終在單元格中顯示相同大小的類型。我已經找到了另一個類似的帖子(here),但響應提供了一個Objectve-C響應:在Swift中禁用動態類型

#import <objc/runtime.h> 

@implementation AppDelegate 

NSString* swizzled_preferredContentSizeCategory(id self, SEL _cmd) 
{ 
    return UIContentSizeCategoryLarge; // Set category you prefer, Large being iOS' default. 
} 

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions 
{ 
    Method method = class_getInstanceMethod([UIApplication class], @selector(preferredContentSizeCategory)); 
    method_setImplementation(method, (IMP)swizzled_preferredContentSizeCategory); 

    ... 
} 

我需要這樣做的斯威夫特。在Xcode 7 +中,在Swift中做同樣的事情的正確方法是什麼?

+0

這是一個懶惰的警察對於許多用戶來說,這對於實際上非常重要的功能非常重要。不要像這樣偷工減料。 – Alexander

+1

@AMomchilov我同意!實際上,我的團隊剛剛討論過它,我們將在未來的版本中實現此功能,但現在我們只需要表格就不會看起來不吉利。所以實際上,這是一種臨時性的創可貼。感謝您的評論,tho。 – zeeple

+0

@zeeple表看起來不好看,這正是我實現上述代碼的原因。我也確保我有一個相當大和可讀的默認字體。 –

回答

2

好的,首先讓我說一下:雖然我很高興能夠快速找到一種方法來適應iOS輔助設置提供的動態文本(我將在一秒內顯示該代碼),但我認爲回答原始問題仍然很重要。

這就是說,這是我對錶視圖代碼所做的,以尊重某些用戶需要的較大類型。這是一個兩步過程。首先,向viewDidLoad方法添加:

tableView.estimatedRowHeight = 44.0 
tableView.rowHeight = UITableViewAutomaticDimension 

。然後,cellForRowAtIndexPath方法中,添加以下返回小區前:

cell.textLabel!.numberOfLines = 0 

運氣好鄉親,並請一個答案添加到原來的問題,如果你有一個:)