RZIntrinsicContentSizeTextView 0.1.1

RZIntrinsicContentSizeTextView 0.1.1

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2016年1月

Derek OstranderJohn StrickerAlex Rouse 维护。



  • Derek Ostrander

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

RZIntrinsicContentSizeTextViewSizeChangedDelegate

// 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文件。