Programing

Xcode 6 iPhone 시뮬레이터 용 iOS 8 UITableView에서 SeparatorInset 제거

crosscheck 2020. 11. 29. 09:53
반응형

Xcode 6 iPhone 시뮬레이터 용 iOS 8 UITableView에서 SeparatorInset 제거


나는에 이상한 공백 발견 UITableView을위한 아이폰 6 시뮬레이터 엑스 코드 6 GM에 (아이폰 OS 8). SeparatorInset스토리 보드와 코드 모두에서 설정하려고했지만 공백은 거기까지입니다.

다음 코드는 iOS 7에서 작동하지만 iOS 8 (iPhone 6 시뮬레이터)에서는 작동하지 않습니다.

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {
        [tableView setSeparatorInset:UIEdgeInsetsZero];
    }
}

아래 스크린 샷을 첨부했습니다.

iPhone 6 Simulator Tableview의 이상한 공백

그런데 AutoLayout을 사용하고 있습니다. 누군가가 .NET Framework에서 이상한 공백을 제거하는 방법을 보여줄 수 있기를 바랍니다 TableView.


" Try this self.myTableView.layoutMargins = UIEdgeInsetsZero ;"라는 의견으로 올바른 방향을 알려준 학생에게 감사드립니다 . layoutMarginsiOS 8 에서만 사용할 수 있기 때문에이 코드 줄은 iOS 8에서만 작동 합니다. iOS 7에서 동일한 코드를 실행하면 충돌이 발생합니다.

@property(nonatomic) UIEdgeInsets layoutMargins
Description   The default spacing to use when laying out content in the view.
Availability  iOS (8.0 and later)
Declared In   UIView.h
Reference UIView Class Reference

여기에 이미지 설명 입력

아래를 설정하여이 이상한 공백을 해결 할 수있는 권리 대답은 tableview layoutMarginscell layoutMarginsUIEdgeInsetsZero가 (아이폰 OS 8)이 존재하는 경우. 그리고 iOS 7에서도 충돌하지 않습니다.

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{

    if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {
        [tableView setSeparatorInset:UIEdgeInsetsZero];
    }

    if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) {
        [tableView setLayoutMargins:UIEdgeInsetsZero];
    }

   if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        [cell setLayoutMargins:UIEdgeInsetsZero];
   }
}

아래 스크린 샷을 참조하십시오.

여기에 이미지 설명 입력


UITableViewCell 클래스 범주를 만들고이 게터를 추가해보십시오.

- (UIEdgeInsets)layoutMargins {
    return UIEdgeInsetsZero;
}

iOS7에서는 SDK에이 속성이 없으므로 충돌이 발생하지 않습니다. iOS8에서는 셀을 사용할 때마다 호출됩니다.

그것은 나를 위해 작동합니다


세 줄의 코드로 내 솔루션 :

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)row{
    //
    // ... your code ...
    //
    if ([cell respondsToSelector:@selector(preservesSuperviewLayoutMargins)]){
        cell.layoutMargins = UIEdgeInsetsZero;
        cell.preservesSuperviewLayoutMargins = false;
    }
    return cell;
}

IOS8은 콘텐츠 여백 구성 이라는 새로운 개념을 도입하고 , layoutMargins 라는 새로운 속성 도 도입했습니다. 속성에 대한 자세한 내용은 Apple 문서를 참조하십시오. layoutMargins 유형 UIEdgeInsets 이며 기본적으로 값은 {8,8,8,8}입니다. IOS8에서 TableView의 구분선을 제거하려면 set 외에도 다음을 tableView.seperatorInset = UIEdgeInsetsZero수행해야합니다.

먼저 매크로 정의

#define isIOS8SystemVersion (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1)

UITableViewDelegate 메소드에서 다음을 추가하십시오.

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
         static NSString *reuseId = @"cellReuseID" ;
         UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];
         if(!cell){
             cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseId];     
         if(isIOS8SystemVersion){   
             cell.layoutMargins = UIEdgeInsetsZero;
             cell.preservesSuperviewLayoutMargins =NO ;
         }

    }

이렇게하면 구분선이 제거됩니다. 다음과 같이 할 수도 있습니다.

    UITableView *tableView = [[UITableView alloc] init];
    if(isIOS8SystemVersion){
         tableView.layoutMargins = UIEdgeInsetsZero ;
    }

UITableViewDelegate 메소드에서 다음을 추가하십시오.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     static NSString *reuseId = @"cellReuseID" ;
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];
     if(!cell){
         cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseId];     
     if(isIOS8SystemVersion){   
         cell.layoutMargins = UIEdgeInsetsZero;
     }
}

In my case in Xcode 6.2, in addition to Will Q's answer, I have to go to Main.storyboard > select the UITableViewCell > Attributes Inspector. Change Separator dropdown list from Default Insets to Custom Insets. Change the left inset from 15 to 0.

여기에 이미지 설명 입력


Workaround for iOS 7 & iOS 8

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{    
    cell.separatorInset = UIEdgeInsetsMake(0.0f, cell.frame.size.width, 0.0f, 0.0f); 
}

In iOS8 you have to set the Inset both on Row and on Table level.

Row level in the cellForRowAtIndexPath:

if ([cell respondsToSelector:@selector(preservesSuperviewLayoutMargins)]){
    cell.layoutMargins = UIEdgeInsetsZero;
    cell.preservesSuperviewLayoutMargins = false;
}

Table level in the viewDidLoad:

[tableReference setSeparatorInset:UIEdgeInsetsZero];

After that it is a good idea to CLEAN your project. On some occasions I noted that these changes were not directly introduced in the executable App in the simulator.


for iOS 8

try by setting cell.layoutMargins = UIEdgeInsetsZero; in cellForRowAtIndexPath method


If you want to remove the white line, but keep separator inset as it is, just set the cell.backgroundColor to the tableView backgroundColor. Just setting the cell.contentView.backgroundColor does not make the problem disappear.


I've tried many ways, none of them work but this one works for me.

 나를 위해 일하십시오


Add startup images for iPhone 6 and Plus. Before the images are added the phone is running in scaling mode, i.e. older Apps get scaled to fit the new screen sizes. This may be causing the lines. The new images are Retina HD 5.5 (iPhone6Plus) 1242x2208 and Retina HD 4.7 (iPhone6) 750x1334.


See iOS 8 UITableView separator inset 0 not working

Basically, you need to set both the cell.layoutMargin as well as the tableView's layoutMargin. YMMV, but I had to set the table view up in layoutSubviews before it would work!


UITableView 구분 기호를 iOS7과 iOS8 모두에 대해 0으로 만들려면 코드를 변경하는 대신 View-> Mode-> Aspect Fill을 변경하여 UITableView의 xib를 변경하십시오.


나는 정적 UITableView이며 셀 구분 기호의 여백을 왼쪽 가장자리로 이동하고 싶었습니다.

위의 답변 덕분에 이것이 내 해결책이었습니다.

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    // needed to shift the margin a specific cell to the left edge
    if indexPath.section == 3 && indexPath.row == 0 {
        cell.layoutMargins = UIEdgeInsetsZero
        cell.preservesSuperviewLayoutMargins = false
        cell.separatorInset = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0)
    }
}

다음을 추가하십시오.

tableView.separatorStyle = .none

참고 URL : https://stackoverflow.com/questions/25762723/remove-separatorinset-on-ios-8-uitableview-for-xcode-6-iphone-simulator

반응형