UIScrollView в iOS 6
Недавно я загрузил Xcode 4.5 (iOS 6), но когда попытался продолжить один из моих проектов, я заметил, что UIScrollView не работает должным образом, позвольте мне объяснить более четко:
Я создал UIScrollView и добавил его инициализированный, используя следующий код:
-(void)viewDidLoad{
[mainScrollView setScrollEnabled:YES];
mainScrollView.contentSize = CGSizeMake(480, 0);
[super viewDidLoad];
}
После того, как я открыл свой XIB и связал mainScrollView
с UIScrollView, после добавления некоторого UIButton в scrollView. Когда я построил проект, прокрутка mainScrollView
, но кнопки не отображались, я имею в виду, я просто мог видеть кнопку, которая уже была на экране. Что я делаю неправильно? Как я могу настроить UIScrollView?
Ответы
Ответ 1
Для xcode 4.5
, если вы используете scrollView
, вы должны либо снять отметку "use AutoLayout
" в инспекторе файлов.
или если вы хотите "использовать AutoLayout
", то в файле .m(реализация) добавьте этот
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
theScroller.contentSize=CGSizeMake(1024.0,1300.0);
}
Ответ 2
Возможно, вы просто набрали это неправильно, но ваш CGSize
имеет высоту 0?
Ответ 3
Вы можете сделать это с помощью автоматического макета в 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;
}
Ответ 4
Я считаю, что это ошибка с 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, может быть хорошей идеей реплицировать код и наконечник там, чтобы увидеть результаты.
Ответ 5
Если вы хотите исправить это и использовать AutoLayout, переместите код contentSize
в метод viewDidAppear
. Я нашел ответ в этом SO-вопросе: Вставить ImageView в ScrollView с автоматической компоновкой на iOS 6
Ответ 6
Я бы сделал это следующим образом:
-(void)viewDidLayoutSubviews
{
[self.scrollview setScrollEnabled:YES];
[self.scrollview setUserInteractionEnabled:YES];
[self.scrollview setContentSize:CGSizeMake(320, _y)];
[self.scrollview setAlwaysBounceVertical:YES];
}
Я использую переменную класса _y, так как я добавляю к ней все высоты надстроек.