2013-04-03 2 views
0

Я создал приложение iPhone со страницей, чтобы показать содержимое .txt-файла в UIScrollView. По какой-то причине мой простой текстовый файл заставляет Scrollview позволять ему слегка поворачивать влево и вправо, я хочу, чтобы он был сплошным прокруткой вниз.Как предотвратить левое правое панорамирование в UIScrollView

действительно нужна помощь с этим ..

Благодаря

#import "ITFAQController.h" 
#import "FTCoreTextView.h" 

@implementation ITFAQController 

- (NSString *)textForView { 

NSString *path = [[NSBundle mainBundle] pathForResource:@"faq" ofType:@"txt"]; 
NSError *error; 
return [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding   error:&error]; 
} 


/*- (id)init 
{ 
self = [super init]; 
if (self) { 
// Custom initialization 
[self showLogoInNavBar:YES]; 
} 
return self; 
} 
*/ 
#pragma mark - View lifecycle 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
[self showLogoInNavBar:YES]; 

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 330, (self.view.bounds.size.height - 90))]; 
[self.view addSubview:scrollView]; 

FTCoreTextView *ctView = [[FTCoreTextView alloc] initWithFrame:CGRectMake(10, 0, 300, scrollView.bounds.size.height)]; 
[ctView setText:[self textForView]]; 


FTCoreTextStyle *defaultStyle = [FTCoreTextStyle styleWithName:FTCoreTextTagDefault]; 
[defaultStyle setFont:kITDescriptionFont]; 
[defaultStyle setTextAlignment:FTCoreTextAlignementJustified]; 
[defaultStyle setParagraphInset:UIEdgeInsetsMake(5, 10, 0, 0)]; 
[ctView addStyle:defaultStyle]; 

FTCoreTextStyle *title = [FTCoreTextStyle styleWithName:@"title"]; 
[title setFont:kITTitleFont]; 
[title setColor:kITCellFontColor]; 
[title setParagraphInset:UIEdgeInsetsMake(10, 0, 5, 0)]; 
[ctView addStyle:title]; 

FTCoreTextStyle *bold = [FTCoreTextStyle styleWithName:@"bold"]; 
[bold setFont:[UIFont boldSystemFontOfSize:14]]; 
[ctView addStyle:bold]; 

FTCoreTextStyle *link = [FTCoreTextStyle styleWithName:FTCoreTextTagLink]; 
[link setColor:[UIColor blueColor]]; 
[ctView addStyle:link]; 

FTCoreTextStyle *bullets = [FTCoreTextStyle styleWithName:FTCoreTextTagBullet]; 
[bullets setBulletColor:kITCellFontColor]; 
[bullets setFont:kITItalicFont]; 
[bullets setParagraphInset:UIEdgeInsetsMake(0, 10, 0, 0)]; 
[ctView addStyle:bullets]; 
[ctView fitToSuggestedHeight]; 

[scrollView addSubview:ctView]; 
[scrollView setContentSize:[ctView suggestedSizeConstrainedToSize:CGSizeMake(scrollView.bounds.size.width, CGFLOAT_MAX)]]; 
//[ctView fitToSuggestedHeight]; 
//[ctView sizeToFit]; 
} 


- (void)viewDidUnload 
{ 
[super viewDidUnload]; 
// Release any retained subviews of the main view. 
// e.g. self.myOutlet = nil; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
// Return YES for supported orientations 
return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

@end 
+1

Хотя не имеет прямое отношение к этой проблеме (Том имеет правильный ответ ниже), это также стоит знать о двух свойстве 'UIScrollView':' alwaysBounceHorizontal' и 'alwaysBounceVertical'. Если для параметра 'bounces' установлено значение' YES', это означает, что просмотр прокрутки все еще отскакивает, если 'contentSize' меньше, чем' frame'. Они по умолчанию «НЕТ» (за исключением «UITableView», я полагаю), но если вы хотите * включить * такое поведение, это одна вещь, которую вы можете сделать. – drewmm

+0

Ну, я частично решил проблему, предотвращая отскок и блокировку при прокрутке. Хотя нет вертикального подпрыгивания, его лучше, чем он будет использоваться. Я все еще нахожу, что могу двигаться влево и вправо на 5 или 10 пикселей. 'UIScrollView * scrollView = [[UIScrollView alloc] initWithFrame: CGRectMake (0, 0, self.view.bounds.size.width, (self.view.bounds.size.height - 90))]; scrollView.bounces = NO; scrollView.alwaysBounceHorizontal = NO; scrollView.directionalLockEnabled = YES; ' – Steve

+0

Спасибо, drewmm за вашу помощь – Steve

ответ

0

Проблема, вероятно, имеет отношение к этой линии:

[scrollView setContentSize:[ctView suggestedSizeConstrainedToSize:CGSizeMake(scrollView.bounds.size.width, CGFLOAT_MAX)]]; 

Я не знаю, что делает этот метод, но это вероятно, дает вам contentSize с width > 320. Добавление следующих строк после этого будет исправить это, я думаю:

if (scrollView.contentSize.width > self.view.bounds.size.width) 
    [scrollView setContentSize:CGSizeMake(self.view.bounds.size.width,scrollView.contentSize.height)]; 
+0

PERFECT !! Спасибо, полезный код! Спасибо drewmm – Steve

+0

Я рад помочь. – drewmm

2
CGRectMake(0, 0, 330, (self.view.bounds.size.height - 90))]; 

Заменить 330 с 320. Это должно сделать трюк.

Edit: Как написано в комментариях вы должны предпочесть self.view.bounds.size.width

+2

В более общем плане замените 330' self.view.bounds.size.width'. Явный номер работает, потому что все устройства iOS имеют одинаковую ширину, но всегда лучше обобщать, чтобы справиться с возможностью использования будущих устройств разных размеров. – drewmm

+0

Да. Совершенно верно. –

+0

Я попытался внизу, но все же разрешил панорамирование влево и вправо ... 'CGRectMake (0, 0, self.view.bounds.size.width, (self.view.bounds.size.height - 90))]; ' – Steve

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