2013-03-23 12 views
18

To powinien być BARDZO łatwy problem, ale mam problem z uzyskaniem pożądanego rezultatu. Mam poziomo przewijania UIScrollView o szerokości 320. Szerokość jej treść jest 5000. Próbuję wyśrodkować zawartość z:Jak wyśrodkować zawartość w UIScrollView z contentOffset

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

ja nie rozumiem, dlaczego to nie jest centrowanie treści. Czy widzisz coś nie tak z obliczeniami?

Odpowiedz

52

Myślę, że chcesz:

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

schemat:

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

Przepraszamy za błąd "self.width". To skrót dodany do kategorii UIView. Dlaczego używasz self.bounds zamiast self.frame? – zakdances

+1

Podejrzewałem, że 'self.width' nie było problemem - naprawdę, to, że chcesz odjąć to od' contentSize.width' - ale użyłem 'self.bounds' z przyzwyczajenia. 'self.bounds.size' i' self.frame.size' powinny być takie same; Zwykle używam 'self.bounds', chyba że potrzebuję relatywnego względem super-spojrzenia, które otrzymuję z' self.frame.origin'. – Isaac

11

skorzystać z poniższego kodu:

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

Swift 4

Przewiń do C wprowadź treść: 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) 
Powiązane problemy