0

長いテキスト (さまざまな言語にローカライズされている) を含む免責事項画面を作成する必要があります。

ユーザーは、テキストのボタンまで下にスクロールし、[同意する] ボタンを表示する必要があります。

アラートはかなり制限されているため、UIViewController を作成し、ScrollView を配置しました。

今、私は TextView をこの Scrollview に入れます - しかし問題は、この TextView がそれ自体でスクロール可能であってはならず、それが保持する完全なテキストに必要な正確なサイズを持つ必要があることです (これはもちろん言語ごとに異なり、常にそれ以上です)画面の高さはスクロールせずに保持できます)、その長い TextView の下に UIButton を配置する必要があります。

TextView + Button の両方が ScrollView にあります。

UITextView は現在の言語によって高さが異なるため、この完全な画面を正しく設定するにはどうすればよいですか? IB を使用するのが理想的です。または、プログラムで不可能な場合は?

それとも、まったく別のはるかに簡単な方法がありますか?

4

3 に答える 3

2

UILabel (行数を 0 に設定) を追加し、その下にあるボタンをスクロール ビューに追加します。ボタンがラベルの下部に垂直方向の間隔の制約を持つように、制約を設定します。ラベルに固定幅の制約と高さの制約を与えます。高さの制約に対して IBOutlet を作成し、sizeWithFont:constrainedToSize:lineBreakMode: から取得した値を使用して、コードでその制約の定数パラメーターを調整します。また、この同じ値に加えて、ボタンに合わせて必要なサイズを使用して、スクロール ビューの contentSize を調整する必要があります。これにより、ラベルに含まれるテキストに基づいてラベルが正しい高さになり、ボタンは常にそのラベルの下に設定された距離になります。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.label.text = @"dfkl;jfjdfkjf sdfl klf;jskdl;fja skfjdklfj skdlfjs dklfjsklfj sklfjskl;f jks;alfjsk;lfjs;klfj;kfjs;kljk;lfjskdfj;klf j;klf jkl;fj;klfj;klfj k;fs;klfjsk;lfj ;klfjk;alfjk;alfjk;lfjk;lfjlkf kl;ajf akl;sfj sk;fk;lfjsk;ldfjsk;lfjsk;lfjsklfjkl;s fjklsafj kslfjkl fjklasfjklajfklafjaksdlfj lsdkf jsklfskl;f skld fjlk;sfklsfj ksff;kjdsfj sfkl;fkl;fklklfjlk;";
    CGSize labelSize = [self.label.text sizeWithFont:[UIFont systemFontOfSize:17] constrainedToSize:CGSizeMake(280, CGFLOAT_MAX)]; // 280 is the width of the label set in IB
    self.heightCon.constant = labelSize.height;
    self.scrollView.contentSize = CGSizeMake(self.scrollView.contentSize.width, labelSize.height +120);

}

この例では、heightCon は IB で作成されたラベルの高さ制限に対する IBOutlet です。私はこれを viewDidLoad で行いましたが、ラベルにテキストを入力する場所であればどこでもこれを行う必要があります。

于 2013-07-08T15:57:04.233 に答える
0

これを解決した方法は、UITableViewController (DisclaimerViewController と呼びます) を作成することです。最初の行にはテキストが表示されます。2 行目は受け入れセルで、3 行目は拒否セルです。

新しい UITableViewController でプロトコルとデリゲートを作成します。プロトコルには、Accept と Deny のセレクターが必要です。デリゲートは、新しいプロトコルに準拠するすべてのオブジェクトを許可する必要があります。

プレゼンティング ViewController から、新しい DisclaimerViewController モーダルを表示します。デリゲートを自分自身に設定し、プロトコルを実装していることを確認してください。受け入れセルと拒否セルは UITableView の一番下にあるため、ユーザーが一番下までスクロールしたことがわかります。Accept セルと Deny セルにアクセスしてタップする方法は他にありません。

これは大変な作業のように思えますが、実際にそうです。しかし、免責事項のテキストが必要な場所が他にある場合は、コードを変更せずにこのコードを再利用できます。

于 2013-07-08T21:45:01.190 に答える