UITextView - addSubview - Autolayout

use*_*037 5 uitextview ios autolayout

问题:

  • 我创建了一个子类UITextView并添加了一个子视图v1.
  • 我正在使用Autolayout,所以我尝试添加用于定位子视图v1的约束.

错误:

它会引发以下错误:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews.

尝试:

  • 我试过在里面创建约束layoutSubviews但是我得到了同样的错误

目的

  • 我的主要目标是在文本视图的底部添加淡入淡出效果

题:

  1. 有没有更好的方法来实现我的目标?
  2. 我该如何解决这个错误?

use*_*037 4

感谢 @mackworth 提出的建议,从而找到了解决方案

为了完整起见,我正在回答它。

概述:

UITextView添加子视图然后使用自动布局似乎存在一些问题。

解决方案:

所以解决方案是创建 HazeView 作为 的父视图的子视图UITextView

脚步:

  1. 创建一个UITextView
  2. 创建 HazeView(UIView 的子类)
  3. UITextViewHazeView作为子视图添加到同一父视图
  4. 位置HazeView位于底部UITextView
  5. 确保HazeView的背景颜色是[UIColor clearColor]
  6. 禁用用户交互HazeView
  7. 最好创建 的子类并将和UIView放入其中,以便可以重用UITextViewHazeView

创建 HazeView:

self.hazeView.backgroundColor = [UIColor clearColor];
Run Code Online (Sandbox Code Playgroud)

HazeView是一个子类UIView

- (void)drawRect:(CGRect)rect
{
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = UIGraphicsGetCurrentContext();

    UIColor *color1 = [UIColor colorWithRed:1.0 green:1.0
                                   blue:1.0 alpha:0.25];

    UIColor *color2 = [UIColor colorWithRed:1.0 green:1.0
                                   blue:1.0 alpha:0.5];

    UIColor *color3 = [UIColor colorWithRed:1.0 green:1.0
                                   blue:1.0 alpha:0.75];

    NSArray *gradientColors = @[(id) color1.CGColor,
                                (id) color2.CGColor,
                                (id) color3.CGColor];

    CGFloat gradientLocations[] = {0, 0.50, 1};
    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) gradientColors, gradientLocations);

    CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
    CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));

    CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
    CGGradientRelease(gradient);
}
Run Code Online (Sandbox Code Playgroud)