UIAppearanceプロキシスタイルをUILabelクラスプロキシに適用しようとすると、信頼性の低い結果が得られます。たとえば、次のように機能します。
[[UILabel appearance] setFont:[UIFont fontWithName:SOME_FONT size:SOME_SIZE]];
[[UILabel appearance] setShadowColor:[UIColor blackColor]];
TextColorの設定は機能しませんが、これは次のとおりです。
[[UILabel appearance] setColor:[UIColor greenColor]];
動作します。 種類。これはやや信頼性が低く、setTextColor:
へのインスタンス固有の呼び出しはすべて無視されます。
UIAppearanceスタイルをUILabelに適用する正しい方法は何ですか?
OK、あなたはILabelプロパティのスタイルを設定できませんUIAppearance
プロキシを使用していることがわかりました。
UILabel
クラスはUIAppearanceContainer
プロトコルに準拠していますが、UILabel.hをチェックすると、そのプロパティのいずれもUI_APPEARANCE_SELECTOR
でマークされていないことがわかります。これはUIAppearance
。
バガー。
Swiftでは、UITableViewHeaderFooterViewに含まれている場合、UILabelの外観属性をカスタマイズするために次の操作を行います。
UILabel.appearance(whenContainedInInstancesOf: [UITableViewHeaderFooterView.self]).font = UIFont.boldSystemFont(ofSize: 18)
UILabel.appearance(whenContainedInInstancesOf: [UITableViewHeaderFooterView.self]).textColor = .white
これは、UITableViewHeaderFooterViewを次の場所で使用するときにtextLabel属性に適用されます。
public func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
var headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: headerViewId)
if headerView == nil {
headerView = UITableViewHeaderFooterView(reuseIdentifier: headerViewId)
}
headerView?.textLabel?.text = "My Header".uppercased()
return headerView
}
これは、UITableViewStyle.groupedを使用する場合に非常に役立ちます。これは、viewForHeaderInSectionでUITableViewHeaderFooterView.textLabelをカスタマイズした場合でも、これらのセクションヘッダービューがデフォルトのスタイルで上書きされるように見えるためです。
UILabelをサブクラス化しました
@interface SmallLabel : UILabel
@end
@implementation SmallLabel
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
}
return self;
}
@end
次に、appearanceWhenContainedInを使用します。
UIFont *smallFont = [UIFont fontWithName:@"Arial" size:15];
[[SmallLabel appearanceWhenContainedIn:[UIView class], nil] setFont:smallFont];
これは、アプリ内のすべてのSmallLabelに目的のフォントを使用するために機能します。 XCode IdentityInspectorでカスタムクラスをSmallLabelに設定する必要があります。プログラムで作成されたラベルでは機能しないようで、NIBのラベルのみで機能します。
さらにテストした後、この方法は常に確実に機能するとは限りません。
次のコードは、Swift 2.2およびiOS9.0を使用して機能しました
let textFieldInsideSearchBar = self.searchBar?.valueForKey("searchField") as? UITextField
textFieldInsideSearchBar?.textColor = BCGConstants.Colors.darkBluishPurpleColor()
let textFieldInsideSearchBarLabel = textFieldInsideSearchBar!.valueForKey("placeholderLabel") as? UILabel
textFieldInsideSearchBarLabel?.textColor = UIColor(red: 220/255, green: 209/255, blue: 231/255, alpha: 1.0)`enter code here`