标准附件视图可以在UITableViewCell内的不同位置吗?

can*_*boy 31 iphone objective-c uitableview accessoryview ios

我希望我的配件与正常情况略有不同.可能吗?此代码无效:

cell.accessoryType =  UITableViewCellAccessoryDisclosureIndicator;
cell.accessoryView.frame = CGRectMake(5.0, 5.0, 5.0, 5.0);
Run Code Online (Sandbox Code Playgroud)

ric*_*son 27

不,你不能移动配件视图的位置.作为替代方案,您可以添加如下的子视图;

[cell.contentView addSubview:aView];
Run Code Online (Sandbox Code Playgroud)

此外,通过将accessoryView属性设置为等于某个accessoryType值,将忽略该值.

  • 实际上可以通过覆盖layoutSubviews并调整框架来以编程方式移动附件视图,如@ Incyc的答案中所示. (2认同)

Ale*_*xey 21

有一种方法可以移动默认的accessoryView,但它非常hacky.因此,当新SDK到达时,它可能会停止工作一天.

使用风险由您自己承担(此代码段accessoryView向左移动任意8个像素.将其插入[self positionAccessoryView];所需-(void)layoutSubviews子类的方法内):

- (void)layoutSubviews {
    [super layoutSubviews];
    [self positionAccessoryView];
}

- (void)positionAccessoryView {
    UIView *accessory = nil;
    if (self.accessoryView) {
        accessory = self.accessoryView;
    } else if (self.accessoryType != UITableViewCellAccessoryNone) {
        for (UIView *subview in self.subviews) {
            if (subview != self.textLabel &&
                subview != self.detailTextLabel &&
                subview != self.backgroundView &&
                subview != self.contentView &&
                subview != self.selectedBackgroundView &&
                subview != self.imageView &&
                [subview isKindOfClass:[UIButton class]]) {
                accessory = subview;
                break;
            }
        }
    }

    CGRect r = accessory.frame;
    r.origin.x -= 8;
    accessory.frame = r;
}
Run Code Online (Sandbox Code Playgroud)

  • 它不使用任何私人API,因此它是合法的.我用它,我的应用程序成功获得批准.另一方面,你必须明白它不是公共API的一部分,因此它可以随时停止工作. (5认同)

Jam*_*ang 16

我可以通过在我的自定义单元子类中执行此操作来更改附件视图的框架.

CGRect adjustedFrame = self.accessoryView.frame;
adjustedFrame.origin.x += 10.0f;
self.accessoryView.frame = adjustedFrame;
Run Code Online (Sandbox Code Playgroud)

  • 有用.如果有人想尝试这个答案,请将这些代码行放在子类`layoutSubviews`方法中; 也不要忘记在`layoutSubviews`方法的开头调用``super layoutSubviews]`. (6认同)
  • 对于默认的附件视图,`accessoryView` 为零,所以你没有回答这个问题。 (2认同)