2014-03-25 8 views
5

Problem:UITextView - addSubview - Automatische Anordnung

  • Ich habe eine Unterklasse von UITextView erstellt und eine Subview v1 hinzugefügt.
  • Ich verwende Autolayout, also habe ich versucht, Einschränkungen für die Positionierung der Subview v1 hinzuzufügen.

Fehler:

Es führt den folgenden Fehler:

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

Versuche gemacht:

  • habe ich versucht, die Einschränkungen innerhalbSchaffung iund noch erhalten den gleichen Fehler

Ziel

  • Mein Hauptziel ist es, einen Fading-Effekt am unteren Rand des Textansicht hinzuzufügen

Frage:

  1. Gibt es einen besseren Weg zu Attai n mein Ziel?
  2. Wie behebe ich diesen Fehler?
+1

Siehe möglich besseren Ansatz hier: http://stackoverflow.com/questions/12845590/applying-cagradient-mask-layer-to-uitextview – mackworth

+0

Danke, Ihr Vorschlag zur endgültigen Lösung führte – user1046037

Antwort

3

Danke für die Anregung @mackworth, die zur Lösung

Der Vollständigkeit führte ich es bin zu beantworten.

Übersicht:

Es scheint einige Probleme beim Hinzufügen subview auf UITextView zu sein und dann Automatische Anordnung verwenden.

Lösung:

So ist die Lösung ist, die HazeView als Subview der übergeordneten Ansicht von UITextView zu erstellen.

Schritte:

  1. erstellen UITextView
  2. erstellen HazeView (Unterklasse von UIView)
  3. sowohl UITextView hinzufügen und HazeView als Subview auf die gleiche übergeordnete Ansicht
  4. Position HazeView bei der Unterseite der UITextView
  5. Stellen Sie sicher, dass die Hintergrundfarbe r von HazeView ist [UIColor clearColor]
  6. deaktivieren Benutzer-Interaktion auf HazeView
  7. Am besten ist es eine Unterklasse von UIView zu schaffen und die UITextView und HazeView im Inneren, dass setzen, so dass es

Erstellen HazeView wiederverwendbar sein kann:

self.hazeView.backgroundColor = [UIColor clearColor]; 

HazeView ist eine Unterklasse von 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); 
} 
0

Ich schlage vor, Sie die folgende Bibliothek für Autolayout zu verwenden:

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

Es ist sehr leicht Einschränkungen mit diesem hinzuzufügen.

Erstellen Sie die Unterklasse von UITextView und die Einschränkungen in -(void)didMoveToSuperview als Add:

-(void)didMoveToSuperview 
{ 
    [self.subview pinToSuperviewEdges:JRTViewPinBottomEdge | JRTViewPinLeftEdge | JRTViewPinRightEdge inset:0]; 
    [self.subview constrainToHeight:10]; 
} 
Verwandte Themen