2017-09-11 5 views
0

Je dois avoir scrollView contient un UIImageView sur le dessus et UITextView avec scrollingEnabled = NO, je veux faire défiler scrollView à l'endroit où je tape.Défilement de scrollView avec TextView

- (void)createScrollView{ 
//TPKeyboardAvoidingScrollView *scrollView = [[TPKeyboardAvoidingScrollView alloc]init]; 
UIScrollView *scrollView = [[UIScrollView alloc]init]; 
//[self.view insertSubview:scrollView belowSubview:_mediaSelectionView]; 
[self.view addSubview: scrollView]; 
[scrollView setTranslatesAutoresizingMaskIntoConstraints: NO]; 
self.scrollView = scrollView; 
scrollView.showsHorizontalScrollIndicator = NO; 
scrollView.showsVerticalScrollIndicator = NO; 
scrollView.bouncesZoom = NO; 
scrollView.alwaysBounceVertical = YES; 
scrollView.clipsToBounds = YES; 
self.automaticallyAdjustsScrollViewInsets = YES; 
NSLayoutConstraint *scrollViewTop = [NSLayoutConstraint 
            constraintWithItem: scrollView 
            attribute: NSLayoutAttributeTop 
            relatedBy: NSLayoutRelationEqual 
            toItem: self.navigationBarBGView 
            attribute: NSLayoutAttributeBottom 
            multiplier: 1 constant:0.0 
            ]; 
NSLayoutConstraint *scrollViewLeading = [NSLayoutConstraint 
             constraintWithItem: scrollView 
             attribute: NSLayoutAttributeLeading 
             relatedBy: NSLayoutRelationEqual 
             toItem: self.view 
             attribute: NSLayoutAttributeLeading 
             multiplier: 1 constant:0.0 
             ]; 

NSLayoutConstraint *superViewTraling = [NSLayoutConstraint 
             constraintWithItem: self.view 
             attribute: NSLayoutAttributeTrailing 
             relatedBy: NSLayoutRelationEqual 
             toItem: scrollView 
             attribute: NSLayoutAttributeTrailing 
             multiplier: 1 constant:0.0 
             ]; 

NSLayoutConstraint *bottomLayoutGuideTop = [NSLayoutConstraint 
              constraintWithItem:self.view 
              attribute: NSLayoutAttributeBottom 
              relatedBy: NSLayoutRelationEqual 
              toItem: scrollView 
              attribute: NSLayoutAttributeBottom 
              multiplier: 1 constant:0.0 
              ]; 
//Add All Constrains. 
[self.view addConstraints: @[scrollViewTop , scrollViewLeading , superViewTraling , bottomLayoutGuideTop ]]; 

_contentView = [[UIView alloc]init]; 

[scrollView addSubview: _contentView]; 
[_contentView setConstraintFlag]; 
[_contentView setFullWidth]; 
[_contentView setTopFromParent:0]; 

}

- (void)createCommentTextView{ 
    UITextView *textView = [[UITextView alloc]init]; 
    textView.backgroundColor = [UIColor clearColor]; 
    textView.textColor = [UIColor colorWithR:67 G:83 B:83 A:1.0f]; 
    textView.delegate = self; 
    textView.scrollEnabled = NO;   
    _commentTextView = textView; 
    [_textViewContainer addSubview:textView]; 

}

-(void)updateContentSize{ 
self.scrollView.contentSize = CGSizeMake(self.scrollView.contentSize.width, self.contentView.frame.size.height); 

}

ScrollView contient _contentView et contentView contient UITextView. La hauteur de textView augmente au fur et à mesure que les types d'utilisateurs et le bas de _contentView est égal au bas de textView.

+0

utiliser une lib il y a plusieurs lib sont disponibles pour même comme https://github.com/michaeltyson/TPKeyboardAvoiding –

Répondre

0

Je suis passé par plusieurs postes et blogs, mais je n'ai pas réponse exacte je veux. Après cela, je suis venu avec une sorte de soln avec l'aide d'autres messages et blogs. J'espère que cela aidera.

- (void)scrollToCursor{ 
    if(self.currentTextView.selectedRange.location != NSNotFound) { 

    NSRange range = self.currentTextView.selectedRange; 

    NSString *string = [<YOUR_TEXTVIEW>.text substringToIndex:range.location]; 

    CGSize size = [string boundingRectWithSize:<YOUR_TEXTVIEW>.frame.size 
             options:NSStringDrawingUsesLineFragmentOrigin| NSStringDrawingUsesFontLeading 
            attributes:@{NSFontAttributeName:<YOUR_TEXTVIEW>.font} 
             context:nil].size; 

    NSInteger yPosition = (<YOUR_TEXTVIEW>.frame.origin.y+size.height+<OFFSET(if required)>); 


    NSInteger scrollViewVisibeYPositionStart = self.scrollView.contentOffset.y; 
    NSInteger scrollViewVisibeYPositionEnd = scrollViewVisibeYPositionStart+self.scrollView.frame.size.height; 

    BOOL needToSetOffset = NO; 

    if (yPosition > scrollViewVisibeYPositionEnd) { 
     yPosition = yPosition - self.scrollView.frame.size.height; 
     needToSetOffset = YES; 

    }else if (yPosition < scrollViewVisibeYPositionStart){ 
     yPosition = self.scrollView.frame.size.height + (scrollViewVisibeYPositionStart - yPosition); 
     needToSetOffset = YES; 
    } 

    if (needToSetOffset) { 
     CGPoint offset = CGPointMake(0,yPosition); 
     [self.scrollView setContentOffset:offset]; 
    } 
} 
}