これは奇妙なことですが、私には理解できませんでした。ボタンのフレームをプログラムで設定できません。
IBOutletをbeyondViewButtonとして持つボタンがあり、それをビューからViewController.mファイルの@interfaceおよび@endセクションに制御ドラッグしてから、@synthesizedします。
viewDidLoadメソッドで、これを追加しました。
//x = x + widthToUse * 0.25;
//y += h + 50;
x = 50; //either hard code x value or set it mathematically, not working
y = 300;
w = 200;
h = 60;
//[beyondViewButton setFrame:CGRectMake(x, y, w, h)]; //not working
beyondViewButton.frame = CGRectMake(x, y, w, h); //not working
//[beyondViewButton setBackgroundImage:[UIImage imageNamed:@"bgImage.png"] forState:UIControlStateNormal]; //this line actually works
//[beyondViewButton setTitle:@"iCool!" forState:UIControlStateNormal];
[beyondViewButton setTitle:@"iShit!" forState:UIControlStateNormal]; //change from iCool to iShit, I can see change
//[self.view addSubview:beyondViewButton]; //either adding this line or not, both work
フレームを設定できないのはなぜですか?
関連するかどうかはわかりませんが、このボタンは、ナビゲーションコントローラーからの「選択ビュー」に設定されており、次のビュー/シーンに移動します。このボタンをクリックすると、アプリは「選択ビュー」から次のビューに移動します---これはストーリーボードを介して実装されました。私はまだストーリーボードを十分に習得しておらず、それについて多くの不確実性を持っています。
誰かがこれにいくつかの光を当てることができますか?ありがとう!!
詳細な診断情報:フレームコードを設定する前後にbutton.descriptionを確認しました:
2012[25830:12503] beyond button <UIRoundedRectButton: 0x8821cd0; frame = (0 0; 0 0); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0x8821da0>>
それは前であり、次は後です。興味深いことに、フレーム値は私が設定したものではありません。ここに示すコードのように、x = 50、y = 300、w = 200、h = 60ですが、NSLogの説明ではx = 190、y = 345、w=です。 110、h = 94、これは実行時に見た位置のあたりです。ストーリーボードで設定した値です。
2012[25830:12503] beyond button <UIRoundedRectButton: 0x8821cd0; frame = (190 345; 110 94); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0x8821da0>>
コードの設定フレーム行をコメントアウトした場合、ボタンの説明を確認すると、ボタン設定の前後で、ボタンフレームとして0,0,0,0が表示されます---ビューの下半分にボタンが表示されますが。言い換えれば、設定フレームの線は何らかの方法で機能しますが、私が望んでいた方法では機能しません。ストーリーボードの値だけを取りますが、x、y、w、hで設定した値は取りません。