2017-04-24 1 views
1

Ich erstelle eine LMLUspringChoosePeriodView und darauf gibt es eine TableView und eine BackgroundView, Ich kann die LMLUspringChoosePeriodView als Popup-Ansicht, in meinem Projekt verwenden. Warum mein TableView ausstrecken?

Dies ist das Verzeichnis davon:

die LMLUpspringChoosePeriodView haben ChoosePeriodTableViewHeader und LMLUpspringPeriodCell, alle von ihnen erstelle ich eine XIB:

und in der LMLUpspringPeriodCell, füge ich die Einschränkungen der Namensschild, so dass es in der Mitte der LMLUspringPeriodCell sein muss:

enter image description here

Wenn ich jedoch die LMLUpspringChoosePeriodView als Popup-Ansicht anzeigen, tritt ein Problem auf:

Der TableView scheint strecke aus dem Bildschirm.

Einschränkungen My Tableview ist ist wie folgt:

enter image description here

Mein Code ist unten:

LMLUpspringChoosePeriodView.h:

typedef void(^LMLUpspringBlock)(); 

#import <UIKit/UIKit.h> 

@interface LMLUpspringChoosePeriodView : UIView 
@property (weak, nonatomic) IBOutlet UIView *upspringBackView; 

@property (weak, nonatomic) IBOutlet UITableView *tableView; 
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *bottom_tableView; 

@property (nonatomic, copy) LMLUpspringBlock block; 

- (void)showSelf; 
- (void)hideSelf; 

@end 

LMLUpspringChoosePeriodView.m:

#import "LMLUpspringChoosePeriodView.h" 
#import "LMLUpspringPeriodCell.h" 
#import "ChoosePeriodTableViewHeader.h" 

@interface LMLUpspringChoosePeriodView() <UITableViewDelegate, UITableViewDataSource> 

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *width_tableView; 

@property (nonatomic, strong) NSArray *title_arr; 

@end 

@implementation LMLUpspringChoosePeriodView 

/* 
// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect { 
    // Drawing code 
} 
*/ 

- (void)awakeFromNib { 

    [super awakeFromNib]; 
    //_width_tableView.constant = KWidth; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

    return 4; 
} 

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 

    ChoosePeriodTableViewHeader *header = [[NSBundle mainBundle] loadNibNamed:@"ChoosePeriodTableViewHeader" owner:self options:nil].firstObject; 

    header.cancel_block = ^() { 

     [self hideSelf]; 
    }; 

    return header; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 


    LMLUpspringPeriodCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LMLUpspringPeriodCell"]; 
    if (cell == nil) { 

     cell = [[NSBundle mainBundle] loadNibNamed:@"LMLUpspringPeriodCell" owner:self options:nil].firstObject; 
    } 

    // 配置cell 
    cell.title_label.text = self.title_arr[indexPath.row]; 

    if (indexPath.row == 3) { 

     cell.bottom_line.hidden = YES; 
    } 

    [self setNeedsLayout]; 
    [self layoutIfNeeded]; 

    return cell; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

    return 44; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 

    return 48; 
} 


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 

    LMLUpspringPeriodCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 

    NSString *period_str = cell.title_label.text; 

    self.block(period_str); 

    [self hideSelf]; 
} 

#pragma mark - action 

- (void)showSelf { 

    self.hidden = NO; 
    [UIView animateWithDuration:0.5 animations:^{ 

     _bottom_tableView.constant = -49; 
     _upspringBackView.alpha = 0.3f; 
    }]; 

} 

- (void)hideSelf { 


    _bottom_tableView.constant = -_tableView.bounds.size.height - 49; 

    [UIView animateWithDuration:0.25 animations:^{ 

     _upspringBackView.alpha = 0.f; 
     [self layoutIfNeeded]; 
    } completion:^(BOOL finished) { 

     if (finished) { 

      self.hidden = YES; 
     } 
    }]; 

} 

- (IBAction)tapBackView:(id)sender { 

    [self hideSelf]; 
} 

#pragma mark - setter 

-(NSArray *)title_arr { 


    if (!_title_arr) { 

     _title_arr = @[@"当天", @"最近一周", @"最近一个月", @"最近三个月"]; 
    } 

    return _title_arr; 
} 

@end 

Die ChoosePeriodTableViewHeader.h:

#import <UIKit/UIKit.h> 

typedef void(^CancelChooseUpspringView)(); 


@interface ChoosePeriodTableViewHeader : UIView 

@property (nonatomic, copy) CancelChooseUpspringView cancel_block; 


@end 

Die ChoosePeriodTableViewHeader.m:

#import "ChoosePeriodTableViewHeader.h" 

@implementation ChoosePeriodTableViewHeader 

/* 
// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect { 
    // Drawing code 
} 
*/ 

// 取消 
- (IBAction)cancel:(UIButton *)sender { 

    self.cancel_block(); 
} 

Die LMLUpspringPeriodCell.h:

#import <UIKit/UIKit.h> 

typedef void(^ConfirmChoosePeriod)(NSString *); 

@interface LMLUpspringPeriodCell : UITableViewCell 

@property (weak, nonatomic) IBOutlet UILabel *title_label; 
@property (weak, nonatomic) IBOutlet UIView *bottom_line; 

@property (nonatomic, copy) ConfirmChoosePeriod confirm_block; 

@end 

Die LMLUpspringPeriodCell.m:

#import "LMLUpspringPeriodCell.h" 

@implementation LMLUpspringPeriodCell 

- (void)awakeFromNib { 
    [super awakeFromNib]; 
    // Initialization code 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state 
} 

@end 

Ich verwende den folgenden Code in der awakeFromNib Methode in der LMLUpspringChoosePeriodView.m (Sie können die LMLUpspringChoosePeriodView sehen versucht.m-Code gibt es Anmerkung im awakeFromNib Methode):

_width_tableView.constant = KWidth; 

der tableView Ersetzen trailling mit der tableview Einschränkung noch strech, aber verwenden, um den folgenden Code:

_width_tableView.constant = KWidth/2; 

Es ist in iPhone7 perfekt, aber haben Problem in iPhone7 plus-:

Also, es ist ein sehr seltsames Problem hier, wie damit zu tun?

Nicht genug, es gibt zweite Ausgabe, das letzte Element kann nicht klicken, ich weiß nicht, ob mit der Registerkarte verwandt ist.

Wie löst man die beiden Probleme? Danke im Voraus.


EDIT -1

ich die LMLUpspringChoosePeriodView zum kwyWindow auf einem VC hinzufügen:

@property (nonatomic, strong) LMLUpspringChoosePeriodView *upspring_v; 

.... 
[[UIApplication sharedApplication].keyWindow addSubview:self.upspring_v]; 

EDIT -2

Das ist mein PurchaseRecordVC .m, da drin Ich zeige die LMLUpspringChoosePeriodView:

#import "PurchaseRecordVC.h" 
#import "LMLUpspringChoosePeriodView.h" 


@interface PurchaseRecordVC() 

@property (nonatomic, strong) LMLUpspringChoosePeriodView *upspring_v; 


@end 

@implementation PurchaseRecordVC 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self initData]; 
    [self initUI]; 
} 

#pragma mark - init 

- (void)initData { 

} 

- (void)initUI { 

    // 添加界面 

    [[UIApplication sharedApplication].keyWindow addSubview:self.upspring_v]; 

} 

#pragma mark - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    // Get the new view controller using [segue destinationViewController]. 
    // Pass the selected object to the new view controller. 
} 


- (IBAction)clickTheChoosePeriod:(UIButton *)sender { 

    [_upspring_v showSelf]; 
} 

#pragma mark - getter 

- (LMLUpspringChoosePeriodView *)upspring_v { 

    if (!_upspring_v) { 

     _upspring_v = [[NSBundle mainBundle] loadNibNamed:@"LMLUpspringChoosePeriodView" owner:self options:nil].firstObject; 
     // 初始化 
     _upspring_v.upspringBackView.alpha = 0; 
     _upspring_v.bottom_tableView.constant = -_upspring_v.tableView.bounds.size.height - 49; 
     _upspring_v.hidden = YES; 
     _upspring_v.block = ^(NSString *period){ 

     }; 
    } 

    return _upspring_v; 
} 



#pragma mark - dealloc 

- (void)dealloc { 

    // 移除界面 
    [self.upspring_v removeFromSuperview]; 
} 

@end 
+0

was Kann das Thema mehr ausarbeiten? – KKRocks

+0

@KKRocks tableView scheint stretch aus dem Bildschirm. –

+0

können Sie einen Screenshot hinzufügen? – KKRocks

Antwort