ios - IOS UITableViewCells 모두 첫 번째 셀에서 뒤죽박죽, Iphone5S 장치 만 해당, 64 비트 시뮬레이터

기사 출처 ios uitableview

이상하게 작동하는 UITableView가 있습니다. 특히, 그것은 기본적인 텍스트와 이미지와 함께 cellForRowAtIndexPath에서 생성 된 상수 8 개의 셀을 가지고 있습니다. 시뮬레이터에서는 훌륭하게 작동합니다. 내 Iphone5에서는 시뮬레이터와 동일하게 작동하지만 내 Iphone5에서는 첫 번째 셀이 존재해야하는 셀이 모두 서로 뒤섞여 있습니다. 아래 이미지는 각각 5s와 시뮬레이터 / 5를 보여줍니다. 왼쪽 "앱에서 로그 아웃"버튼은 마지막 셀에 있어야하며 화살표로 표시된 다른 콘텐츠 위에 추가됩니다.

편집 : 세 번째 이미지는 업데이트 된 cellForRowAtIndexPath가있는 64 비트 시뮬레이터로, 8 개 행 모두에 대해 textLabel을 "Hello"로 설정하기 위해 매우 단순화되었습니다.

자동 레이아웃은 앱의 어느 곳에서도 사용되지 않습니다.

Iphone 5S는 IOS7.1.1을 실행하지만 Iphone5는 IOS7.1을 실행합니다. 시뮬레이터는 최신 Xcode (5.1.1)의 일부이며 최신 7.1과 함께 제공됩니다. 나는 5s의 최신 .1이 이것을 일으킬 수 있다고 상상할 수 없습니다.

이것이 왜 뒤죽박죽인지, 특히 5S에서만 왜 그런지 생각하십니까?





- (NSInteger)numberOfSectionsInTableView:(UITableView*)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 8;
}

- (float)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath {
    float height =  self.view.frame.size.height / [self tableView:tableView numberOfRowsInSection:indexPath.section];
    return height;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *CellIdentifier = @"CellMain";

    UITableViewCell *_cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (_cell == nil) {
        _cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
         _cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    NSString *user_fullname = [userDefaults valueForKey:@"user_fullname"];

    _cell.textLabel.textColor = [UIColor colorWithHexString:@"58A5D5"];
    _cell.detailTextLabel.textColor = [UIColor colorWithHexString:@"58A5D5"];
    if(indexPath.row == 0){
        _cell.textLabel.text = [NSString stringWithFormat:@"%@",@"User Name"];//user_fullname];
        _cell.detailTextLabel.text = [NSString stringWithFormat:@"Member since: %@", @"April 28, 2014"];
        _cell.imageView.image = [UIImage imageNamed:@"profile_photo.png"];
        _cell.imageView.contentMode = UIViewContentModeScaleAspectFit;

        UIImageView *arrowImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow_right.png"]];
        arrowImg.frame = CGRectMake(292, 14, 18, 30);
        [_cell.contentView addSubview:arrowImg];
    } else if(indexPath.row == 1){
        _cell.textLabel.text = [NSString stringWithFormat:@"ActivitySync"];
        _cell.detailTextLabel.text = [NSString stringWithFormat:@"Last sync: %@", @"5 minutes ago"];
        _cell.imageView.image = [UIImage imageNamed:@"iphone_sm.png"];
        _cell.imageView.contentMode = UIViewContentModeScaleAspectFit;
    } else if(indexPath.row == 2){
        _cell.contentView.backgroundColor = [UIColor colorWithHexString:@"D9DBDB"];
    } else if(indexPath.row == 3){
        _cell.textLabel.text = [NSString stringWithFormat:@"%@",@"Challenges"];
        UIImageView *arrowImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow_right.png"]];
        arrowImg.frame = CGRectMake(292, 14, 18, 30);
        [_cell.contentView addSubview:arrowImg];
    } else if(indexPath.row == 4){
        _cell.textLabel.text = [NSString stringWithFormat:@"%@",@"Setup a New Device"];
        UIImageView *arrowImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow_right.png"]];
        arrowImg.frame = CGRectMake(292, 14, 18, 30);
        [_cell.contentView addSubview:arrowImg];
    } else if(indexPath.row == 5){
        _cell.textLabel.text = [NSString stringWithFormat:@"%@",@"Help"];
        UIImageView *arrowImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow_right.png"]];
        arrowImg.frame = CGRectMake(292, 14, 18, 30);
        [_cell.contentView addSubview:arrowImg];
    } else if(indexPath.row == 6){
        _cell.contentView.backgroundColor = [UIColor colorWithHexString:@"D9DBDB"];
    } else if(indexPath.row == 7){
        UIButton *logout = [[UIButton alloc] initWithFrame:CGRectMake(10, 9, 300, 39)];
        [logout setTitle:@"Log Out of App" forState:UIControlStateNormal];
        logout.titleLabel.textColor = [UIColor colorWithHexString:@"58A5D5"];
        [logout addTarget:self action:@selector(logoutBtnClicked:) forControlEvents:UIControlEventTouchUpInside];
        [_cell.contentView addSubview:logout];
    }

    return _cell;
}
heightForRow 메서드에서 CGFloat가 아닌 float를 반환합니다. 이것은 64 비트 문제입니다. 유형이 다르게 정의됩니다. 부동 소수점을 반환하면 64 비트 장치에서 높이가 0으로 처리됩니다.

메서드의 반환 유형과 내부 선언도 변경해야합니다. UIKit에 대해 float를 사용하지 마십시오. 항상 CGFloat입니다.

이 질문에 대해 Stack Overflow에서 비슷한 토론을 찾았습니다: https://stackoverflow.com/questions/23570068/

관련 기사
ios - XAMARIN의 UIScrollView에서 UIView 제거
ios - 사용되지 않는 AudioSessionSetProperty 대체
ios - iAd에 광고가 표시되지 않음
ios - UISearchDisplayDelegate 메서드가 호출되지 않았습니다.
ios - Parse.com 저장 이미지 IOS
ios - NSException 유형의 포착되지 않은 예외로 인해로드 종료시 앱 충돌
ios - iOS에서 페어링 된 Bluetooth 장치를 제거하려면 어떻게합니까?
ios - Windows 8에 Xcode를 설치하는 방법은 무엇입니까? [복제]
ios - iOS7 : 백그라운드 작업 ( "myapp"에 허용 된 시간을 초과하는 활성 어설 션이 있음)
ios - 'NSInvalidArgumentException', 이유 : '***-[NSURL initFileURLWithPath :] : nil string parameter'