2014-01-27 3 views
0

Это может показаться немного странным, но у меня есть настраиваемый текстовый элемент, который я создаю с четким фоном. Кроме того, у меня есть пользовательский вид прокрутки, который я создаю с горизонтальными цветными линиями, и устанавливаю это прокручивание под текстом. Причина, по которой я не добавляю строки непосредственно в textView (что я делал изначально), состоит в том, что у меня есть другое представление «sandwhiched» между верхним textView и над scrollView. Итак, иерархия выглядит так: Top ---> UITextView, Middle ---> UIView, Bottom ---> UIScrollView.Пользовательский прокрутка UIScrollView с пользовательским UITextView

Все это отлично работает, за исключением того, что я не могу заставить прокрутку нижнего прокрутки прокручиваться с помощью textView, поскольку размер содержимого scrollView не совпадает с содержимым textView, и поэтому никаких дополнительных строк в scrollView , Я даже попытался установить размер содержимого scrollView в том, что касается textView, но это тоже не работает.

Буду признателен за любую помощь и советы. Я добавлю код, который я использую для создания пользовательского прокрутки.

Код:

LineScrollView.h:

#import <UIKit/UIKit.h> 

@interface LineScrollView : UIScrollView 

@end 

LineScrollView.m:

#import "LineScrollView.h" 

@implementation LineScrollView 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) 
    { 
     self.backgroundColor = [UIColor clearColor]; 
     self.userInteractionEnabled = NO; 
     self.scrollsToTop = NO; 
    } 
    return self; 
} 

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetStrokeColorWithColor(context, [UIColor colorWithRed:(95.0f/255.0f) green:(197.0f/255.0f) blue:(236.0f/255.0f) alpha:0.8f].CGColor); 
    CGContextSetLineWidth(context, 1.2f); 
    CGContextBeginPath(context); 

    // Below lineHeight value determined using NSLog on my custom textView  

    CGFloat lineHeight = 21.473999; 
    NSUInteger numberOfLines = (self.contentSize.height + self.bounds.size.height)/lineHeight; 

    CGFloat baselineOffset = 1.2f; 

    for (int x = 1; x < numberOfLines; x++) 
    { 
     CGContextMoveToPoint(context, self.bounds.origin.x, (lineHeight+9)*x - baselineOffset); 
     CGContextAddLineToPoint(context, self.bounds.size.width, (lineHeight+9)*x - baselineOffset); 
    } 

    CGContextClosePath(context); 
    CGContextStrokePath(context); 
} 

@end 

ViewController:

#import "TextView.h" 
#import "LineScrollView.h" 

@property (nonatomic, strong) TextView *TextView; 
@property (nonatomic, strong) UIView *sandWhichedView; 
@property (nonatomic, strong) LineScrollView *LineView; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.sandWhichedView = [[UIView alloc]initWithFrame:initWithFrame:CGRectMake(41.5, 35, 278, 58)]; 

    self.TextView = [[TextView alloc] initWithFrame:CGRectMake(41.5, 35, 278, 58)]; 

    self.LineView = [[LineScrollView alloc]initWithFrame:CGRectMake(41.5, 35, 279, 58)]; 

    self.LineView.delegate = self; 

    self.TextView.delegate = self; 

    [self.view addSubview:self.LineView]; 
    [self.view addSubview:self.sandWhichedView]; 
    [self.view addSubview:self.TextView]; 
} 

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (scrollView == self.TextView) 
    { 
     self.LineView.contentSize = self.TextView.contentSize; 
     CGPoint offset = self.TextView.contentOffset; 
     offset.y = self.TextView.contentOffset.y; 
     [self.LineView setContentOffset:offset]; 
    } 
} 

ответ

0

Похоже, я нашел решение сам, я забыл добавить thi s в моем обычном scrollView:

self.contentMode = UIViewContentModeRedraw; 

Буквально решена все мои головные боли.

Смежные вопросы