在 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

仅在横向模式下锁定应用程序