如何将UIAppearance Proxy属性应用于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:
被忽略。
将UIA外观样式应用于UILabel的正确方法是什么?
好吧,事实certificate,您不能使用UIAppearance
代理devise任何UILabel属性 。
虽然UILabel
类符合UIAppearanceContainer
协议,但对UILabel.h的检查显示,它的任何属性都没有标记UI_APPEARANCE_SELECTOR
,这是使用UI_APPEARANCE_SELECTOR
的先决条件。
开溜。
我已经分类了UILabel
@interface SmallLabel : UILabel @end @implementation SmallLabel - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { } return self; } @end
那么我使用外观当包含在:
UIFont *smallFont = [UIFont fontWithName:@"Arial" size:15]; [[SmallLabel appearanceWhenContainedIn:[UIView class], nil] setFont:smallFont];
这适用于我的应用程序中的所有SmallLabels所需的字体。 我只需要在XCode Identity Inspector中将Custom Class设置为SmallLabel。 它似乎没有与标签创build编程,只有那些在NIBs。
进一步testing后,这种方法并不总是可靠地工作。
以下代码使用swift 2.2和iOS 9.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`
在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,那些部分标题视图似乎被默认样式覆盖