Как установить размер фрейма UIScrollView программно?

Я новичок, поэтому мой вопрос может быть очень очевидным, но я не нашел пока решения.

Я сделал в IB UIScrollView и связал его с владельцем файла. Я хотел бы установить размер кадра моего UIScrollView (с именем ScrollView).

const CGFloat BoardWidth = 320;
const CGFloat BoardHeight = 400;

//I tried this way but 'Expression is assignable' - said Xcode
ScrollView.frame.size.width = BoardWidth;
ScrollView.frame.size.height = BoardWidth;

Итак, как я могу проще всего установить собственные размеры рамки ScrollView?

5 ответов


CGRect scrollFrame = CGRrectMake(x, y, w, h);
ScrollView.frame = scrollFrame;

или если вам нужно только изменить ширину и высоту;

CGRect scrollFrame;
scrollFrame.origin = ScrollView.frame.origin;
scrollFrame.size = CGSizeMake(w, h);
ScrollView.frame = scrollFrame;

редактировать сохранение центра без изменений:

CGRect scrollFrame;
CGFloat newX = scrollView.frame.origin.x + (scrollView.frame.size.width - w) / 2;
CGFloat newY = scrollView.frame.origin.y + (scrollView.frame.size.height - y) / 2;
scrollFrame.origin = CGPointMake(newX, newY);
scrollFrame.size = CGSizeMake(w, h);
scrollView.frame = scrollFrame;

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

ScrollView.frame = CGRectMake(0, 0, BoardWidth, BoardHeight);

после этого Вам также нужно установить contentSize собственность. Это область, которая "простирается" за рамкой вашего UIScrollView.

если вы хотите прокрутки только по горизонтали:

ScrollView.contentSize = CGSizeMake(w * BoardWidth, BoardHeight);

если вы хотите прокрутки только по вертикали:

ScrollView.contentSize = CGSizeMake(BoardWidth, h * BoardHeight);

если вы хотите прокручивать как по горизонтали, так и по вертикали:

ScrollView.contentSize = CGSizeMake(w * BoardWidth, h * BoardHeight);

здесь w и h являются общими значениями для увеличения вашего ширина и/или высота.

если вы хотите иметь горизонтальную (например) дискретную прокрутку (например, у вас есть несколько страниц с тем же размером экрана).

ScrollView.pagingEnabled = YES;
ScrollView.contentSize = CGSizeMake(p * BoardWidth, BoardHeight);

здесь p - это количество страниц, которые вы хотите отобразить.

надеюсь, что это помогает.


Вы можете сделать это, как показано ниже

scrollView.frame = CGRectMake(xOrigin,yOrigin,width,height);

Если вы ищете размер содержимого scrollview, то он, как показано ниже,

scrollView.contentSize = CGSizeMake(width,height);

CGRect Frame = ScrollView.frame

Frame.frame.size.width = BoardWidth;
Frame.frame.size.width = BoardWidth;

ScrollView.frame = Frame;

Так как frame является структурой..вы не можете установить фрейм объекта напрямую.. Вам нужно будет сделать Cgrect, а затем манипулировать им.


использование свойства contentSize

ScrollView.contentSize = CGSizeMake(320, 520);

он должен быть больше кадра, поэтому он фактически прокручивается.