2013-03-23 2 views
18

Это должно быть ОЧЕНЬ легкая проблема, но у меня возникают проблемы с получением желаемого результата. Я горизонтально прокрутки UIScrollView с шириной 320. Ширина его содержания 5000. Я пытаюсь центрировать содержимое с:Как разместить содержимое в UIScrollView с contentOffset

// 'self' is the UIScrollView 
CGFloat newContentOffsetX = (self.width/2) + (self.contentSize.width/2); 
self.contentOffset = CGPointMake(newContentOffsetX, 0); 

Я не понимаю, почему это не центрирования содержание. Вы видите что-то не так с расчетами?

ответ

52

Я думаю, что вы хотите:

CGFloat newContentOffsetX = (self.contentSize.width/2) - (self.bounds.size.width/2); 

схема:

|------------------------self.contentSize.width------------------------| 
         |-----self.width-----| 
|-------- offset --------| 
            ^center 
+1

Извините за недоразумение «self.width». Это ярлык, который я добавил с категорией UIView. Почему вы используете self.bounds вместо self.frame? – zakdances

+1

Я подозревал, что 'self.width' не проблема - действительно, вы хотите вычесть это из' contentSize.width', но я использовал 'self.bounds' по привычке. 'self.bounds.size' и' self.frame.size' должны быть одинаковыми; Я склонен использовать 'self.bounds', если мне не нужен исходный-относительный-супервизор, который я получаю с помощью' self.frame.origin'. – Isaac

11

Использование ниже код:

CGFloat newContentOffsetX = (scrollView.contentSize.width - scrollView.frame.size.width)/2; 
scrollView.contentOffset = CGPointMake(newContentOffsetX, 0); 
0

Swift 4

свитка к с ввод содержания ScrollView

let centerOffsetX = (scrollView.contentSize.width - scrollView.frame.size.width)/2 
let centerOffsetY = (scrollView.contentSize.height - scrollView.frame.size.height)/2 
let centerPoint = CGPoint(x: centerOffsetX, y: centerOffsetY) 
scrollView.setContentOffset(centerPoint, animated: true) 
Смежные вопросы