1

アプリの UIButton サブクラスを作成しましたが、ボタンの高さの約 1/4 になるように titleLabel を手動で再配置する必要があります。この郵便受け; http://forums.macrumors.com/showthread.php?t=763140は同じ問題に直接対処しているようで、解決策はシンプルで完全に理解できます。ただし、layoutSubviews のオーバーライドが呼び出されないため、これを実装できませんでした。私のボタンは静的なので、layoutSubviews は初めて呼び出す必要がありますが、決してそうではありません。私のコード:

@interface MyButton : UIButton {}

@implementation MyButton

- (id)initWithFrame:(CGRect)frame
{
  self = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
  [[self layer] setCornerRadius:14.0f];
  [[self layer] setBorderWidth:3.0f];
  [[self layer] setMasksToBounds:YES];
  [self setBackgroundColor:[UIColor redColor]];
  [self setFrame:frame];
  return self;
}

- (void)layoutSubviews
{
  NSLog(@"layout subs\n");
  [super layoutSubviews];
}

@end

ラベルの移動は問題ありませんが、layoutSubviews が呼び出されることはありません。私もlayoutIfNeededを追加しようとしましたが、違いはありませんでした。さらに奇妙なことに、コンストラクターから直接 [self layoutSubviews] を呼び出そうとしましたが、layoutSubviewsはまだ呼び出されていません。これはSDK 3.1.3のバグかもしれないと思い始めています

誰か助けてくれませんか?!

4

2 に答える 2

2
于 2014-07-10T04:24:28.680 に答える
1

私自身の質問に答えるために、間違ってサブクラス化していたようです。次のアプローチを取ると、layoutSubviews が正しく呼び出されます。

+ (id)buttonWithFrame:(CGRect)frame {
  return [[[self alloc] initWithFrame:frame] autorelease];
}

- (id)initWithFrame:(CGRect)frame {
  if (self = [super initWithFrame:frame]) 
  {
    ...
    [self setFrame:frame];
  }
  return self;
}

他の人を助けることを願っています

于 2010-09-22T11:53:16.803 に答える