1

そこには と があり、UITableViewControllerUIViewの下にとプロトタイプ セルがあります。UITableViewUIView

の内容UIViewがDynamicなので、1行目のDynamicの原点(y)を変更したいです。

UIViewフレームと境界を変更すると

self.albumView.bounds=CGRectMake(0,0,self.albumView.frame.size.width, self.albumView.frame.size.height+100);
self.albumView.frame=CGRectMake(0,0,self.albumView.frame.size.width, self.albumView.frame.size.height+100);

UIView が重なって行を非表示にします (ヘッダーしか見えません)

しかし、同じコードを書いたとき (void)viewWillAppear 問題なく動作しますが、リクエストからデータをまだ受け取っていないため、高さがわからないという問題があります。

私は試した

[self.view setNeedsDisplay];
[self.tableView setNeedsDisplay];

しかし、何も機能していないようです。どうすればこれを修正できますか?

TableViewController レイアウトからスナップを追加しています

http://preview.otherlap.com/snap.png (私は新しいユーザーなので画像を追加できないのでリンクがあります)

UIView の高さは、json データに従って動的です。私が望むのは、テーブルの最初の行の原点 (y) の位置を変更することだけです。

ここにサンプルコード

    -(void)viewWillAppear:(BOOL)animated{
         //self.albumView.bounds=CGRectMake(0,0,self.albumView.frame.size.width,self.albumView.frame.size.height+100);
       //self.albumView.frame=CGRectMake(0,0,self.albumView.frame.size.width,self.albumView.frame.size.height+100);
    }
     - (void)viewDidLoad
 {

    [super viewDidLoad];
     ...load some data from server
 }
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{

    [jsonData setLength:0];
}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{

    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    [jsonData appendData:data];

}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
 self.albumView.bounds=CGRectMake(0,0,self.albumView.frame.size.width,self.albumView.frame.size.height+dynamicHeight);  self.albumView.frame=CGRectMake(0,0,self.albumView.frame.size.width,self.albumView.frame.size.height+dynamicHeight);
}

ViewWillAppear で UIView の高さを設定すると、最初のセルの原点が正しく移動します。connectionDidFinishLoad で高さを設定すると、セルとオーバーラップします。

編集:答えが見つかりました。自分で答えを見つけました..

StoryBoard の TableView の上に UiView を追加すると、自動的に tableHeaderView になります

だから解決策はそれだった

CGRect newFrame = self.tableView.tableHeaderView.frame;
newFrame.size.height = DynamicHeight;
self.tableView.tableHeaderView.frame = newFrame;
[self.tableView setTableHeaderView:self.tableView.tableHeaderView];
4

1 に答える 1

-1

setNeedsLayout- (void)layoutSubviewsメソッドを呼び出す必要があることを意味します。- (void)layoutSubviewsしたがって、サイズ変更コードをメソッドに入れる必要があります。

于 2012-12-04T14:29:38.117 に答える