10

これは奇妙なことですが、私には理解できませんでした。ボタンのフレームをプログラムで設定できません。

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で設定した値は取りません。

4

3 に答える 3

13

インターフェイス ビルダーで自動レイアウトを有効にしている場合は、ビューからボタンを削除し、サイズを変更してから、再度追加することもできます。ゲットーのようなものですが、うまくいきます。

これに似た何か...

[self.myButton removeFromSuperview];
[self.myButton setTranslatesAutoresizingMaskIntoConstraints:YES];
[self.myButton sizeToFit];
[self.myView addSubview:self.myButton];
于 2014-03-06T17:24:04.433 に答える
8

ストーリーボードは新しい自動レイアウト機能を使用していますか? オンになっている場合は、ボタンをオフにしてみてください。私はこの機能に慣れていないのでブラインドショットですが、他に何を疑うべきかわかりません.

于 2012-11-09T01:58:18.863 に答える