首页 文章

如何设置自定义UIView的大小/位置以放置在自定义UITableViewCell中?

提问于
浏览
1

如何设置在UITableViewCell内以编程方式放置的子视图的大小?

我有一个自定义(子类)UITableViewCell,其中单元格的一部分包含许多行(动态),它们被实现为自定义UIView . 我们的想法是创建自定义视图(这是一行项目),然后当UITableViewCell访问layoutSubviews时,它将(a)设置自己重新定位和(b)循环并在每个行上调用“layoutSubviews”它用于行的自定义UIViews .

Question - 我不确定如何正确设置自定义UIView行的大小/位置?我如何在自定义UIView layoutSubviews方法中确定其x,y,宽度,高度以便我可以定位它?

我实际上是否需要在UITableCellView的layoutSubviews方法中手动循环遍历所有行并调用它们的自定义方法来传递它们需要的位置/宽度/高度?然后当自定义UIView行的layoutSubview方法被命中时,它会知道查找它的实例变量,它存储这些值以使用它们吗?

希望这是有道理的 .

结构是:

Dynamic Custom UITableCellView (subclassed)

  • 在heightForRowAtIndexPath中动态确定rowHeight
    在layoutSubviews中
  • 它包括循环子视图(我有自定义UIView)并在每个子视图上调用layoutSubview

In custom UIView (which represents a row of items, e.g. UILabel)

布局子视图中的

    • 问题:如何设置此子视图的帧大小?
  • 我假设帧的x,y应该是0,0?

  • 对于宽度/高度,您如何获得应该设置的超视区的完整大小?

  • superview是否应该在layoutSubviews之前将此信息传递给它?

2 回答

  • 1

    作为tableViewCell子类的一部分添加的任何视图相对于单元格框定位,即x:0,y:0用于子视图原点,将是tableCell的左上角 . 这样的事情应该足以让你开始 .

    CGRect frame =[self frame];
    frame.size.height=20.0f;
    frame.origin.x=(self.frame.size.height/2)-frame.size.height;
    frame.origin.y=0.0f;
    [subview setFrame:frame];
    
  • 3

    您可以使用resize方法向UIView添加类别 .

    UIView ResizeMethods.h

    - (void) setHeight: (CGFloat) height;
    - (void) setWidth: (CGFloat) width;
    - (void) setTop: (CGFloat) top;
    - (void) setLeft: (CGFloat) left;
    

    UIView ResizeMethods.m

    - (void) setHeight: (CGFloat) height {
        CGRect frame = self.frame;
        frame.size.height = height;
        self.frame = frame;
    }
    - (void) setWidth: (CGFloat) width {
        CGRect frame = self.frame;
        frame.size.width = width;
        self.frame = frame;
    }
    - (void) setTop: (CGFloat) top {
        CGRect frame = self.frame;
        frame.origin.y = top;
        self.frame = frame;
    }
    - (void) setLeft: (CGFloat) left {
        CGRect frame = self.frame;
        frame.origin.x = left;
        self.frame = frame;
    }
    

相关问题