2015-08-29 2 views
0

Я новичок в разработке приложений IOS. Я пытаюсь реализовать scrollview. Я вообще не могу прокручивать.Функция прокрутки UIScrollView не работает?

Ниже приведено мое представление. Я создал прокрутку и добавил в нее небольшие блоки с разными цветами. Я добавил один блок из текущих границ экрана, чтобы я мог прокручивать UIScrollView и просматривать его.

@implementation CustomView 

- (instancetype)init 
{ 
    self = [super init]; 
    if (self) { 
    CGRect screenRect = CGRectMake(70, 100, 250, 800); 
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:screenRect]; 
    scrollView.scrollEnabled = YES; 
    [scrollView setBackgroundColor:[UIColor yellowColor]]; 
    [scrollView setAlpha:0.2]; 
    [self addSubview:scrollView]; 

    CGRect temp = CGRectMake(100, 150, 10, 10); 
    UIView *firstView = [[UIView alloc] initWithFrame:temp]; 
    [firstView setBackgroundColor:[UIColor redColor]]; 
    [scrollView addSubview:firstView]; 

    temp = CGRectMake(150, 200, 10, 10); 
    UIView *secondView = [[UIView alloc] initWithFrame:temp]; 
    [secondView setBackgroundColor:[UIColor greenColor]]; 
    [scrollView addSubview:secondView]; 

    temp = CGRectMake(200, 750, 10, 10); 
    UIView *thirdView = [[UIView alloc] initWithFrame:temp]; 
    [thirdView setBackgroundColor:[UIColor orangeColor]]; 
    [scrollView addSubview:thirdView]; 

    scrollView.contentSize = screenRect.size; 
} 
return self; 
} 
@end 

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

@interface ViewController() 

@property (nonatomic, readonly) CustomView *currentView; 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
[super viewDidLoad]; 

_currentView = [[CustomView alloc] init]; 
[self.view addSubview:_currentView]; 
} 

- (void)didReceiveMemoryWarning { 
[super didReceiveMemoryWarning]; 
// Dispose of any resources that can be recreated. 
} 
@end 

Я не могу вообще прокрутить эту реализацию. я что-то упускаю ? Может кто-нибудь объяснить, что не так с моим кодом.

Спасибо

ответ

1

При добавлении Scrollview к экрану он должен быть размером, который вы хотите отобразить на экран. Он будет отображаться на экране просто как UIView только тогда, когда вы посмотрите на него.

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame: CGRectMake(20, 20, 250, 250)]; 

выше инициализация даст вам представление прокрутки размера 250x250 размещается в позиции (20,20).

Для прокрутки вам необходимо определить размер содержимого прокрутки. Этот размер контента должен быть больше размера вашего прокрутки, иначе вы не сможете его отличить. Размер содержимого должен определяться на основе содержимого, которое вы собираетесь разместить внутри него.

Например, если три вида, которые вы добавляете внутри scrollview, занимают общую ширину 500 и высоту 300, тогда ваш размер содержимого должен быть равен только такому виду.

[scrollView setContentSize:CGSizeMake(500, 300)]; 

Это позволит вам прокручивать внутри прокрутки.

Также необходимо добавить контент, который вы добавляете к вам, прокрутки, учитывая верхний левый угол scrollView в качестве местоположения (0,0). Так что если вы хотите, чтобы отобразить что-то в верхнем левом углу Scrollview то размеры рамы этой конкретной точки зрения должно быть, как это

CGRectMake(0,0,30,30); 

Это добавит вид размера 30х30 в верхнем левом углу scrollView.

Надеюсь, это поможет.

-1

Прежде всего, то, что вы пытаетесь сделать, должно быть сделано с помощью UITableView. Я не уверен, почему вы пытаетесь это сделать.

Во всяком случае, вы пытались установить также contentSize свойство UIScrollView?

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIScrollView_Class/#//apple_ref/occ/instp/UIScrollView/contentSize

+0

Вид прокрутки - это вид прокрутки. Чтобы вставить три представления в разных местах в своем содержании, почему вы говорите, что представление таблицы лучше? – Gabriel

+0

OK, моя ошибка. Я должен был видеть координаты более тщательно. Я имел в виду, что когда кто-то пытается создавать строки с использованием UIScrollView и пользовательского подзаголовка (как-то пытающийся воссоздать TableView, например, пользовательский интерфейс), я видел такую ​​ошибку в других местах. – Anand

0

Ваше мнение прокрутки не прокручивать, потому что его кадр больше, его размер содержимого. Добавьте эту строку в контроллере представления после того, как перед добавлением Scrollview, как подвид:

_currentView.frame = self.view.bounds ; 
+0

установка рамки для текущего обзора не помогла. Он все еще не работает. – sr116

+0

Это работает. Я протестировал его. Строка должна быть вставлена ​​перед [self.view addSubview: _currentView]; – Gabriel

0

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

Кроме того, попробуйте использовать UITableView (или UIStackView в прошивке 9), чтобы добиться того же поведения, не делая математику

+0

Я установил contentSize в 250 * 800 rect. Высота contentSize (800) больше высоты экрана. – sr116

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