【问题标题】:Set UIImageView frame in initWithCoder在 initWithCoder 中设置 UIImageView 框架
【发布时间】:2013-10-08 15:48:08
【问题描述】:

我正在尝试在 UICollectionCell 的子类中设置 UIImageView 的帧大小,但它不起作用。我使用故事板。

在代码中,除了关于 imageView 的最后一行,一切正常。 如果我将代码放在 drawRect 中,它可以正常工作。

- (id)initWithCoder:(NSCoder *)decoder {
if ((self = [super initWithCoder:decoder]))
{
    self.backgroundColor = [UIColor colorWithWhite:0.85f alpha:1.0f];

    self.layer.borderColor = [UIColor lightGrayColor].CGColor;
    self.layer.borderWidth = 1.0f;

    self.layer.cornerRadius = 8.0f;
    self.layer.masksToBounds = NO;
    self.layer.shadowColor = [UIColor blackColor].CGColor;
    self.layer.shadowRadius = 3.0f;
    self.layer.shadowOffset = CGSizeMake(0.0f, 2.0f);
    self.layer.shadowOpacity = 0.5f;

    self.imageView.frame = CGRectMake(10, 10, 50, 50);
}

【问题讨论】:

    标签: ios uiimageview storyboard initwithcoder


    【解决方案1】:

    那是因为你的 imageView(我相信它和 IBOutlet)还没有初始化,它仍然是 nil。请注意,你们中的一些变量/属性正在 init 的方法中进行初始化。设置你的断点,你会看到。尝试在其他地方设置 imageView 值,例如 drawRect(如您所建议的)或 awakeFromNib。

    【讨论】:

      【解决方案2】:

      图像视图是否稍后被其他对象移动?尝试将该代码移动到 layoutSubviews 中

      添加这个方法:

      - (void) layoutSubviews
      {
          [super layoutSubviews];
      
          self.imageView.frame = CGRectMake(10, 10, 50, 50);
      }
      

      【讨论】:

      • 不,它在 layoutSubviews 中不起作用。视图稍后不会移动......我通过调用drawRect中的方法解决了这个问题(不是最佳的,但它有效)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 2014-03-15
      • 2020-09-30
      • 1970-01-01
      相关资源
      最近更新 更多