1

カスタムラベルを使用してPDFジェネレーターを実行する必要があるため、ストーリーボードにUIViewを含むUIScrollViewがあり、UIViewがいっぱいの場合は、別のUIViewを追加して、まだ含まれていない他のラベルを入力します。 UIScrollViewに別のUIViewを使用して別のページを追加するにはどうすればよいですか?プログラムで実行する必要がありますか、それともストーリーボードにそれを実行するためのオプションがありますか?

私はこれを試しました(それが機能するかどうかはわかりませんが、コンパイルしたくないので、本当に醜いです):

CGFloat placement = titleLabel.frame.size.height + kMarginLabel;

for(int i = 0; i < [contract.nameContract count]; i++)

{

    if(placement > _contractPageView.frame.size.height)

    {

        CGFloat secondPlacement = 0;

        _scrollView.contentSize = CGSizeMake(_contractPageView.frame.size.width * 2, _contractPageView.frame.size.height);

        UIView *secondPage = [[UIView alloc] initWithFrame:_contractPageView.frame];

        articleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0 + kMarginLabel, secondPlacement, kTitleHeight, kTitleWidth)];

        articleLabel.text = [NSString stringWithFormat:@"Article %i - %@",i, [contract.nameContract objectAtIndex:i]];

        [secondPage addSubview:articleLabel];

        secondPlacement += articleLabel.frame.size.height;

        clauseLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, secondPlacement + kMarginLabel, _contractPageView.frame.size.width, kSizeOfClause)];

        clauseLabel.text = [contract.textContract objectAtIndex:i];

        secondPlacement += clauseLabel.frame.size.height;

        [secondPage addSubview:clauseLabel];

        [_scrollView addSubview:secondPage];



        if(secondPlacement > secondPage.frame.size.height)

        {

            CGFloat thirdPlacement = 0;

            _scrollView.contentSize = CGSizeMake(_contractPageView.frame.size.width * 3, _contractPageView.frame.size.height);

            UIView *thirdPage = [[UIView alloc] initWithFrame:_contractPageView.frame];

            articleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0 + kMarginLabel, thirdPlacement, kTitleHeight, kTitleWidth)];

            articleLabel.text = [NSString stringWithFormat:@"Article %i - %@",i, [contract.nameContract objectAtIndex:i]];

            [thirdPage addSubview:articleLabel];

            thirdPlacement += articleLabel.frame.size.height;

            clauseLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, thirdPlacement + kMarginLabel, _contractPageView.frame.size.width, kSizeOfClause)];

            clauseLabel.text = [contract.textContract objectAtIndex:i];

            thirdPlacement += clauseLabel.frame.size.height;

            [thirdPage addSubview:clauseLabel];

            [_scrollView addSubview:thirdPage];

        }



    } else {

        articleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, placement, kTitleHeight, kTitleWidth)];

        articleLabel.text = [NSString stringWithFormat:@"Article %i - %@",i, [contract.nameContract objectAtIndex:i]];

        [_contractPageView addSubview:articleLabel];

        placement += articleLabel.frame.size.height;

        clauseLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, placement + kMarginLabel, _contractPageView.frame.size.width, kSizeOfClause)];

        clauseLabel.text = [contract.textContract objectAtIndex:i];

        placement += clauseLabel.frame.size.height;

        [_contractPageView addSubview:clauseLabel];

    }



}

それが唯一の方法かどうかはわかりません。配列に非常に多くのオブジェクトがある場合は、ますます多くのページを作成する必要があります:/方法がわかりません:(

ご協力いただきありがとうございます。

4

1 に答える 1

0

プロジェクトの1つで、汎用コアデータエディターに対して同様のコードを実行しました。ご覧のとおり、2つのオプションがあります。

  1. コレクションビューを使用してプロトタイプビューをページとして設計し、テキストを管理する配列コントローラーに接続します。テキストは、NSTextViewにバインドできる配列として編成できますNSAttributedString(ページごとに1つ)

  2. より柔軟性が必要な場合、つまり、さまざまなサイズ、さまざまなレイアウトなどのページが必要な場合は、プロパティとして「ページ」の配列を保持する独自のコンテナをプログラムでき(このクラスを定義する必要があります)、この配列が変更されるたびに再計算されますサイズと制約。たとえば、すべてのページの高さを合計し、コンテンツビューのサイズを適切に設定します。

それが役に立てば幸い

于 2013-02-12T23:04:19.283 に答える