2012-06-24 8 views
11

Недавно я скачал Xcode 4.5 (IOS 6), но когда попытался продолжить один из моих проектов, я заметил, что UIScrollView не работает должным образом, позвольте мне объяснить более ясно:UIScrollView в прошивке 6

I «ве создал UIScrollView и добавил инициализируется его, используя следующий код:

-(void)viewDidLoad{ 

    [mainScrollView setScrollEnabled:YES]; 
    mainScrollView.contentSize = CGSizeMake(480, 0); 

    [super viewDidLoad]; 

} 

после того, как я открыл свой XIB и связал mainScrollView к UIScrollView, после того, как я добавил некоторые UIButton, чтобы в scrollView.When я построил проект в mainScrollView прокручивался, но кнопки не появлялись, я имею в виду, я просто мог видеть кнопку, которая уже была на scre эн. Что я делаю неправильно? Как настроить UIScrollView?

+0

У меня была такая же проблема только сейчас. Может ли это быть ошибкой в ​​SDK iOS6? –

ответ

4

Возможно, вы нанесете это неправильно, но ваш CGSize имеет высоту 0?

+0

Просто чтобы отключить вертикальную прокрутку! – Mateus

+1

Не можете ли вы просто отключить его в IB? Или просто используя свойства? Установка ширины CGSize в 0 звучит как плохая идея. – DGund

+0

Если вы хотите отключить вертикальную прокрутку, установите высоту содержимого так же, как размер прокрутки и отключите вертикальное отскок. –

3

Я считаю, что это ошибка с Xcode 4.5 или iOS 6 SDK. То, как я исправил это, - это добавление подпрограмм в мой UIScrollView программно.

Таким образом, вы должны сделать что-то вроде:

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(400.0f, 10.0f, 60.0f, 30.0f); 
    [mainScrollView addSubView:button]; 
    mainScrollView.contentSize = CGSizeMake(480.0f, mainScrollView.frame.size.height); 
} 

Попробуйте это и дайте мне знать, если это работает для вас.

Если у вас есть старая версия Xcode, может быть хорошей идеей реплицировать код и наконечник там, чтобы увидеть результаты.

39

Для xcode 4.5, если вы используете scrollView, вам необходимо снять отметку «use AutoLayout» в инспекторе файлов.

или если вы хотите, чтобы «использовать AutoLayout», то в .m (реализации) Файл добавить

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    theScroller.contentSize=CGSizeMake(1024.0,1300.0); 
} 
+1

Спасибо, спасибо, спасибо! Я ударяю головой о кирпичную стену в течение часа или более. Еще раз спасибо. – PaulJ

+2

ОК, поэтому ответ на AutoLayout можно найти здесь: http://stackoverflow.com/questions/12619786/embed-imageview-in-scrollview-with-auto-layout-on-ios-6 в основном, переместите 'contentSize' кода в метод 'viewDidAppear'. – PaulJ

+0

СПАСИБО за этот пост !!!! Я буквально сожгла целый день с этим. Я отключил «использование AutoLayout», и, наконец, мой scrollView работает так, как предполагалось. Огоняет меня ... TY снова – tg2007

4

Вы можете сделать это с Auto Layout в XCode 4.5 Но конфигурации вашего UIScrollView в viewDidAppear

Я делаю это также в статическом UITableView с изображениями.

Имя ваши изображения как timg1.png, timg2.png ....

в вашем ControllerView.h Файл

@property (weak, nonatomic) IBOutlet UIScrollView *Sv1; 
@property (weak, nonatomic) IBOutlet UIPageControl *Pc1; 

В вашем ControllerView.m Файл

-(void)viewDidAppear:(BOOL)animated 
{ 

    //Scrollview 
    Sv1.delegate = self; 

    Sv1.contentSize = CGSizeMake(260, 176); 

    [self.Sv1 setBackgroundColor:[UIColor clearColor]]; 
    // ScrollViewGarten.frame = CGRectMake(9, 11, 283, 170); 
    [Sv1 setCanCancelContentTouches:NO]; 

    Sv1.multipleTouchEnabled = NO; 
    Sv1.indicatorStyle = UIScrollViewIndicatorStyleWhite; 
    Sv1.clipsToBounds = YES; 
    Sv1.scrollEnabled = YES; 
    Sv1.pagingEnabled = YES; 

    NSUInteger nimagesTextil = 0; 
    CGFloat cxTextil = 0; 
    for (; ; nimagesTextil++) { 
     NSString *imageNameTextil = [NSString stringWithFormat:@"timg%d.png", (nimagesTextil + 1)]; 
     UIImage *imageTextil = [UIImage imageNamed:imageNameTextil]; 
     if (imageTextil == nil) { 
      break; 
     } 
     UIImageView *imageViewTextil = [[UIImageView alloc] initWithImage:imageTextil]; 

     CGRect rect = imageViewTextil.frame; 
     rect.size.height = 176; 
     rect.size.width = 260; 
     rect.origin.x = ((Sv1.frame.size.width - imageTextil.size.width)/2) + cxTextil; 
     rect.origin.y = ((Sv1.frame.size.height - imageTextil.size.height)/2); 

     imageViewTextil.frame = rect; 

     [Sv1 addSubview:imageViewTextil]; 

     cxTextil += Sv1.frame.size.width; 
    } 
    self.Pc1.numberOfPages = nimagesTextil; 
    [Sv1 setContentSize:CGSizeMake(cxTextil, [Sv1 bounds].size.height)]; 
    self.Pc1.currentPage = 0; 

} 
0

I сделал бы это следующим образом:

-(void)viewDidLayoutSubviews 
{ 
[self.scrollview setScrollEnabled:YES]; 
[self.scrollview setUserInteractionEnabled:YES]; 
[self.scrollview setContentSize:CGSizeMake(320, _y)]; 
[self.scrollview setAlwaysBounceVertical:YES]; 
} 

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

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