测试已测试 | ✓ |
语言语言 | Obj-CObjective C |
许可证 | MIT |
发布最后发布 | 2016年1月 |
由 Derek Ostrander,John Stricker,Alex Rouse 维护。
RZIntrinsicContentSizeTextView 是一个方便的 UITextView 子类,它具有您希望出现在 UITextView 中的所有功能:一个占位符和根据其内容大小动态增长的能力。
这对于许多消息应用来说很理想,在这些应用中,用户会在一个初始尺寸较小的 textview 中输入,但随着需要,textview 将会根据自己的内容大小扩大高度和/或宽度。
RZIntrinsicContentSizeTextView 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod 'RZIntrinsicContentSizeTextView'
要运行示例项目,请克隆仓库,然后从 Example 目录运行 pod install
占位符接口类似于 UITextField。
.placeholder text of the placeholder label
.placeholderTextColor textColor of the placeholder label
.atributedPlaceholer attributedString for the placeholder label.
如果您需要更精细地控制占位符的外观,可以使用 .attributedPlaceholder
注意: textview 的大小不考虑与 .font
属性不同的字体。目前建议这两个字体相等。
您应该可以将此放置在 xib 中或程序化初始化,并且它会正常工作。只要它被指定了宽度,无论是直接指定还是通过其布局指定。这将考虑最小和最大约束确定高度,既不会太小也不会太大。
.heightPriority the priority on the height constraint of the textview. Default is 999.0f
注意:如果您有其他约束(除 textview 之外的),这些约束将影响其高度,则可能需要更改高度优先级。
默认情况下,textview 将尝试通过设置其高度并在其父视图中调用 layoutIfNeeded
来动画化其大小。但是,如果您想覆盖此行为,可以使用 RZIntrinsicContentSizeTextViewSizeChangedDelegate
协议的 .sizeChangeDelegate
// Determine's whether or not the textview should animate it's size change
- (BOOL)intrinsicTextView:shouldAnimateToSize:
// The UIView that is going to get layoutIfNeeded called on it
- (UIView *)intrinsicTextViewLayoutView:
如果您不希望有动画,您可以通过从 intrinsicTextView:shouldAnimateToSize
返回 false 来实现这一点
- (BOOL)intrinsicTextView:(RZIntrinsicContentSizeTextView *)textView shouldAnimateToSize:(CGSize)toSize
{
return NO;
}
如果需要更改调用 layoutIfNeeded 的视图
- (UIView *)intrinsicTextViewLayoutView:(RZIntrinsicContentSizeTextView *)textView
{
return self.view;
}
This should only be used if the textivew wants to animate and is getting odd animations
The most common case for this is when the textview is in a container. You will need to call layoutIfNeeded on the container's superview during the animation so the container will also animate it's layout changing.
这是基本的使用案例代码。其中文本视图固定在视图底部,最小高度为40.0f,最大高度为100.0f。
// add textview to view
self.textView = [[RZIntrinsicContentSizeTextView alloc] initWithFrame:CGRectZero];
self.textView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:self.textView];
// set textview attributes
self.textView.font = [UIFont systemFontOfSize:[UIFont systemFontSize]];
// set placeholder attributes
self.textView.placeholder = @"Hey hey hey";
self.textView.placeholderTextColor = [UIColor redColor];
// Pin the textview to the bottom of the view
NSDictionary *views = NSDictionaryOfVariableBindings(_textView,self.view);
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_textView]|"
options:0
metrics:nil
views:views]];
self.bottomConstraint = [NSLayoutConstraint constraintWithItem:self.view
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.textView
attribute:NSLayoutAttributeBottom
multiplier:1.0f
constant:0.0f];
[self.view addConstraint:self.bottomConstraint];
// set min/max constraints
NSLayoutConstraint *minHeightConstraint = [NSLayoutConstraint constraintWithItem:self.textView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationGreaterThanOrEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0f
constant:40.0f];
[self.textView addConstraint:minHeightConstraint];
NSLayoutConstraint *maxHeightConstraint = [NSLayoutConstraint constraintWithItem:self.textView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationLessThanOrEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0f
constant:100.0f];
[self.textView addConstraint:maxHeightConstraint];
Derek Ostrander,[email protected],@_derko
John Stricker,[email protected]
RZIntrinsicContentSizeTextView 在MIT许可下可用。有关更多信息,请参阅LICENSE文件。