web-dev-qa-db-ja.com

UIAppearanceプロキシプロパティをUILabelに適用するにはどうすればよいですか?

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に適用する正しい方法は何ですか?

30

OK、あなたはILabelプロパティのスタイルを設定できませんUIAppearanceプロキシを使用していることがわかりました。

UILabelクラスはUIAppearanceContainerプロトコルに準拠していますが、UILabel.hをチェックすると、そのプロパティのいずれもUI_APPEARANCE_SELECTORでマークされていないことがわかります。これはUIAppearance

バガー。

54

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をカスタマイズした場合でも、これらのセクションヘッダービューがデフォルトのスタイルで上書きされるように見えるためです。

1
Kevin Bloom

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のラベルのみで機能します。

さらにテストした後、この方法は常に確実に機能するとは限りません。

1
David Pettigrew

次のコードは、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`
0
Mohsin Qureshi