带有自定义 selectedBackgroundView 的 UITableViewCell,它比 UISplitViewController 上的主视图控制器更宽

Posted

技术标签:

【中文标题】带有自定义 selectedBackgroundView 的 UITableViewCell,它比 UISplitViewController 上的主视图控制器更宽【英文标题】:UITableViewCell with a custom selectedBackgroundView that is wider than the master view controller on a UISplitViewController 【发布时间】:2013-04-08 19:58:44 【问题描述】:

我有一个 iPad 应用程序,其 UISplitViewController 始终显示在风景中。它的主控制器是 UITableViewController。

我想让这个 UITableViewController 上的单元格的 selectedBackgroundView 溢出到细节 ViewController 中。像这样的:

我怎样才能做到这一点? 如果我尝试设置红色箭头图像(即 342 像素宽),它会被调整为 320 像素。 我还尝试继承 UIImageView 并覆盖 setFrame 以忽略任何尝试调整图像大小的调用,但仍然没有运气。

有什么想法吗?

【问题讨论】:

尝试将您能想到的所有视图上的所有clipsToBounds 属性设置为NO。一旦你得到了一些有用的东西,就把它们一个一个地取下来,直到你只剩下实现你的效果所需的最低限度的定制。 成功了!非常感谢:) 我会在答案中发布我更新的代码 【参考方案1】:

(于 2013 年 10 月 1 日更新,使其适用于 ios7)

感谢 Erway Software 用户帮助我。

这是我如何让代码工作的方法:

在 UITableViewController 上:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    // ...
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"someId"];
    UIImage *image = [UIImage imageNamed:@"image_name"];
    SelectionImageView *imageView = [[SelectionImageView alloc] initWithImage:image];
    [cell setSelectedBackgroundView:imageView];

    [tableView setClipsToBounds:NO];
    [[[cell contentView] superview] setClipsToBounds:NO];
    // ...

这里是 SelectionImageView 的代码:

@interface SelectionImageView : UIImageView

@end


@implementation SelectionImageView

- (void)setFrame:(CGRect)frame

    // 342 is the width of image_name
    if (frame.size.width == 342.f) 
        [super setFrame:frame];
    


@end

【讨论】:

以上是关于带有自定义 selectedBackgroundView 的 UITableViewCell,它比 UISplitViewController 上的主视图控制器更宽的主要内容,如果未能解决你的问题,请参考以下文章

带有自定义按钮的自定义 UIAlertView

带有自定义数据的自定义 UIActivity

自定义 Combobox 控件自定义数据源,带有自定义 displaymember 和 valuemember

带有自定义后退导航按钮的自定义按钮栏

带有 xib 文件和自定义构造函数的自定义 UITableViewCell

带有自定义 slug 的 wordpress 自定义帖子类型并获取变量