在 InterfaceOrientation 上的 customCell 中重新定位 UIButtons
Posted
技术标签:
【中文标题】在 InterfaceOrientation 上的 customCell 中重新定位 UIButtons【英文标题】:Reposition UIButtons inside customCell on InterfaceOrientation 【发布时间】:2013-03-27 15:57:35 【问题描述】:我使用的是自定义的 tableviewcell,有 3 个按钮。
我在我的自定义单元格中的 layoutSubviews 方法中设置了按钮的框架:
-(void)layoutSubviews
[super layoutSubviews];
CGRect frame;
if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
frame = CGRectMake(310, 7, 55, 35);
_prod.frame = frame;
frame = CGRectMake(365, 7, 55, 35);
_leva.frame = frame;
frame = CGRectMake(220, 4, 65, 65);
_imageButton.frame = frame;
else
frame = CGRectMake(150, 7, 55, 35);
_prod.frame = frame;
frame = CGRectMake(205, 7, 55, 35);
_leva.frame = frame;
frame = CGRectMake(120, 4, 65, 65);
_imageButton.frame = frame;
问题是,当用户滚动表格视图时,在将方向更改为横向(例如,所有按钮)后,所有按钮都会返回到旧的纵向位置。 以下是我初始化单元格的方式:
LojaCell *cell = (LojaCell *) [tableView dequeueReusableCellWithIdentifier: @"LojaCell"];
if(cell == nil) cell = [[LojaCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"LojaCell"];
【问题讨论】:
【参考方案1】:您可能必须将相同的方向敏感代码添加到 cellForRowAtIndexPath: 以便在 tableview 重新加载或重新创建单元格时它们加载到正确的位置。因为您使用的是 dequeueReusableCells,它会移除屏幕外的单元格以提高性能,这可能解释了滚动时的行为。
【讨论】:
以上是关于在 InterfaceOrientation 上的 customCell 中重新定位 UIButtons的主要内容,如果未能解决你的问题,请参考以下文章
我可以观察 UIViewController 何时更改 interfaceOrientation 吗?
“self.interfaceOrientation”未在 iOS 5 中更新
如何在视图控制器层次结构中正确设置 interfaceOrientation 属性?
如何知道 iOS 8 中的当前 interfaceOrientation?
self.interfaceOrientation 导致在 iOS 4.x 上调用 shouldAutorotateToInterfaceOrientation