旋转后UITableViewCell图像不能调整大小
在屏幕旋转后,我无法在UITableViewCell中调整图像大小。 在我的cellForRowAtIndexPath
我检测设备的宽度,如果宽度小于480,我将图像设置为屏幕宽度,然后将高度设置为(图像高度/图像宽度*屏幕宽度)以保持图像缩放。 如果设备的宽度大于480,我会做同样的事情,除非我将宽度设置为等于屏幕的一半,使缩放后的图像更小一些。
下面是我用画像和风景布局画出页面外观的图像。 当我从风景旋转到肖像时,可见图像仍保留在屏幕上,除非我滚动到离开屏幕的位置,否则不会重新调整大小。
当我从肖像走到风景时,同样的事情也会起作用,它会在右侧留下一个大的开放空间,直到我向下滚动,然后加载得很好。 我有一种感觉,这很简单,比如添加autoresizingmask,但我无法弄清楚它应该放在哪里以及如何解决它:
[self.myTableView setAutoresizesSubviews:YES];
[self.myTableView setAutoresizingMask:
UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight];
以下是我的cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellIndentifier = @"BasicCell";
UITableViewCell *myCell = [tableView dequeueReusableCellWithIdentifier:cellIndentifier];
myCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIndentifier];
CGRect result = [UIScreen mainScreen].bounds;
CGFloat width = CGRectGetWidth(result);
CGFloat height = CGRectGetHeight(result);
UIInterfaceOrientation interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation;
if(UIInterfaceOrientationIsPortrait(interfaceOrientation)){
result.size = CGSizeMake(width, height);
} else if(UIInterfaceOrientationIsLandscape(interfaceOrientation)) {
result.size = CGSizeMake(height, width);
}
if(result.size.width <= 480) {
Companies *item = _feedItems[indexPath.row];
myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,CGRectGetWidth(self.listTableView.bounds), (item.imageName.size.height / item.imageName.size.width) * CGRectGetWidth(self.listTableView.bounds))];
myImageView.tag = indexPath.row;
myImageView.image = item.imageName;
[myCell addSubview:myImageView];
}
if(result.size.width > 480) {
NSLog(@"IndexPath.row: %d, feedItems: %d",indexPath.row, _feedItems.count);
if((indexPath.row*2+1) <= _feedItems.count) {
Companies *item = _feedItems[indexPath.row * 2];
myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,CGRectGetWidth(self.listTableView.bounds) / 2, (item.imageName.size.height / item.imageName.size.width) / 2 * CGRectGetWidth(self.listTableView.bounds))];
myImageView.tag = indexPath.row*2;
myImageView.image = item.imageName;
[myCell addSubview:myImageView];
if ((indexPath.row*2+1) < _feedItems.count) {
Companies *item2 = _feedItems[(indexPath.row * 2) + 1];
myImageView2 = [[UIImageView alloc] initWithFrame:CGRectMake(CGRectGetWidth(self.listTableView.bounds) / 2,0,CGRectGetWidth(self.listTableView.bounds) / 2, (item.imageName.size.height / item.imageName.size.width) / 2 * CGRectGetWidth(self.listTableView.bounds))];
myImageView2.tag = indexPath.row*2+1;
myImageView2.image = item2.imageName;
[myCell addSubview:myImageView2];
}
}
}
return myCell;
}
我确信在某个时候我有正确的想法,但我所尝试过的一切都没有改变。 我的直觉告诉我需要将autoresizingmask添加到myImageView,但是这是在cellForRowAtIndexPath中绘制的。 任何帮助是极大的赞赏。
调用[self.myTableView reloadData]
应该修复它,如果单元格只需要重新加载(似乎是问题,因为当你滚动的问题是固定的)。
您可以添加如下所示的内容:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[self.myTableView reloadData]
}
在iOS 8中,您需要在视图控制器中执行此操作:
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
// Resizes the table cell rows to match the new size.
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
[self.tableView reloadData];
} completion:nil];
}
链接地址: http://www.djcxy.com/p/58385.html