Это может показаться немного странным, но у меня есть настраиваемый текстовый элемент, который я создаю с четким фоном. Кроме того, у меня есть пользовательский вид прокрутки, который я создаю с горизонтальными цветными линиями, и устанавливаю это прокручивание под текстом. Причина, по которой я не добавляю строки непосредственно в 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];
}
}