30

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

4

4 に答える 4

56

OK、プロキシを使用してUILabelプロパティのスタイルを設定することはできませんUIAppearance

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

バガー。

于 2012-08-07T04:16:20.273 に答える
1

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に目的のフォントを使用するために機能します。XCodeIdentityInspectorでカスタムクラスをSmallLabelに設定する必要があります。プログラムで作成されたラベルでは機能しないようで、NIBのラベルでのみ機能します。

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

于 2013-06-13T15:26:47.397 に答える
1

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

于 2017-08-15T18:39:32.443 に答える
0

次のコードは、swift2.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`
于 2017-04-18T12:53:17.450 に答える