首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UITextView - addSubview - Autolayout

UITextView - addSubview - Autolayout
EN

Stack Overflow用户
提问于 2014-03-25 13:05:59
回答 2查看 3K关注 0票数 5

问题:

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

错误:

它引发以下错误:

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

尝试:

  • 我尝试在layoutSubviews中创建约束,但是我得到了相同的错误

目标

  • 我的主要目标是在文本视图的底部添加一个褪色效果。

问题:

  1. 有更好的方法来达到我的目标吗?
  2. 如何解决此错误?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-26 00:13:28

感谢@mackworth给出的解决方案的建议

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

概述:

UITextView上添加子视图,然后使用Autolayout似乎有一些问题。

解决方案:

因此,解决方案是将HazeView创建为UITextView父视图的子视图。

步骤:

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

创建HazeView:

代码语言:javascript
复制
self.hazeView.backgroundColor = [UIColor clearColor];

HazeViewUIView的子类

代码语言:javascript
复制
- (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);
}
票数 3
EN

Stack Overflow用户

发布于 2014-03-25 13:50:55

我建议您使用以下库进行Autolayout:

https://github.com/jrturton/UIView-Autolayout

使用此方法添加约束非常容易。

创建UITextView的子类并将-(void)didMoveToSuperview中的约束添加为:

代码语言:javascript
复制
-(void)didMoveToSuperview
{
    [self.subview pinToSuperviewEdges:JRTViewPinBottomEdge | JRTViewPinLeftEdge | JRTViewPinRightEdge inset:0];
    [self.subview constrainToHeight:10];
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22635571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档