2013-07-29 2 views
0

Я просто пытаюсь создать свой собственный макет. Я использовал UITableView для моего UIViewController. У меня есть ответ JSON с сервера. Это похоже на подробную публикацию. Также я вычисляю свою высоту UITableViewCell, потому что моя публикация содержит смесь изображений и текста. Я написал собственный макет и пересчитал, когда устройство вращается.Как правильно правильно разместить

for (UIView * sub in contentSubviews) { 
    if([sub isKindOfClass:[PaddingLabel class]]) 
    { 
     PaddingLabel *textPart = (PaddingLabel *)sub; 
     reusableFrame = textPart.frame; 
     reusableFrame.origin.y = partHeight; 
     partHeight += textPart.frame.size.height; 
     [textPart setFrame:reusableFrame];    
    } else if([sub isKindOfClass:[UIImageView class]]) 
    { 
     UIImageView * imagePart = (UIImageView *)sub; 
     reusableFrame = imagePart.frame; 
     reusableFrame.origin.y = partHeight; 
     reusableFrame.origin.x = screenWidth/2 - imageSize.width/2; 
     reusableFrame.size.width = imageSize.width; 
     reusableFrame.size.height = imageSize.height; 
     [imagePart setFrame:reusableFrame]; 
     partHeight += imagePart.frame.size.height; 
    } 
} 

Но у меня есть проблема. Когда состояние ориентации устройства изменяется UIScrollView смещение такое же, как было. Я не знаю, как это изменить. Перед вращением:

enter image description here

После вращения:

enter image description here

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

ответ

0

Есть несколько вариантов, в зависимости от того, что вы хотите показать после вращения. Одним из возможных решений является получение contentOffset.y/contentSize.height перед ротацией, а затем несколько его для нового contentSize.height для получения нового contentOffset.y. Или, если вы хотите сохранить определенный элемент видимым до и после вращения, получите разницу между element_view.frame.origin.y и contentOffset.y, а затем установите новый contentOffset.y как element_view.frame.origin.y + разницу.