iOS-UITextView添加PlaceHolder(iOS 8 later)

相信大家已经在网上看过很多次了,具体的做法我这边就直接用代码代替了,这里主要说一下,我在使用中遇见的一个问题,以及解决方案,希望能够给遇见同样问题的小伙伴,提供一个解决问题的办法。
添加占位符的核心代码就是利用私有属性“_placeholderLabel”和KVC。

// 添加占位符label
[self.textView addSubview:self.placeHolderLabel]; 
[self.textView setValue:self.placeHolderLabel forKey:@"_placeholderLabel"];

placeHolderLabelgetter方法

- (UILabel *)placeHolderLabel{
    if (!_placeHolderLabel) {
        _placeHolderLabel = [[UILabel alloc] init];
        _placeHolderLabel.font = self.textView.font; //这里也可以设置和textView不同的font
        _placeHolderLabel.numberOfLines = 0;
        _placeHolderLabel.textColor = [UIColor yd_colorD8D8D8];
        _placeHolderLabel.text = _placeHolder;
        [_placeHolderLabel sizeToFit];
    }
    return _placeHolderLabel;
}

我这边遇见的问题是,设置完之后,placeHolderLabeltextView中的位置偏上,也就是占位字符串上半部分被遮挡,没有达到自己的预期。解决方法是为textView显式设置下font属性。

// ??: 这块貌似必须显示设置textView的font属性,否则placeholderLabel位置会向上偏移
self.textView.font = [UIFont systemFontOfSize:14];
[self.textView addSubview:self.placeHolderLabel];
[self.textView setValue:self.placeHolderLabel forKey:@"_placeholderLabel"];

如果有小伙伴和我遇见一样的问题,可以尝试一下。

你可能感兴趣的:(iOS-UITextView添加PlaceHolder(iOS 8 later))