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];
}
}
아래 스크린 샷을 첨부했습니다.
그런데 AutoLayout을 사용하고 있습니다. 누군가가 .NET Framework에서 이상한 공백을 제거하는 방법을 보여줄 수 있기를 바랍니다 TableView
.
" Try this self.myTableView.layoutMargins = UIEdgeInsetsZero ;"라는 의견으로 올바른 방향을 알려준 학생에게 감사드립니다 . layoutMargins 는 iOS 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 layoutMargins
와 cell layoutMargins
로 UIEdgeInsetsZero
가 (아이폰 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
'Programing' 카테고리의 다른 글
신속한 스크립트에서 터미널 명령을 어떻게 실행합니까? (0) | 2020.11.29 |
---|---|
문자열에서 문자 발생을 계산하는 간단한 방법 (0) | 2020.11.29 |
AndroidJUnit4 및 ActivityTestRule을 단위 테스트 클래스로 가져올 수없는 이유는 무엇입니까? (0) | 2020.11.29 |
트랩 표현 (0) | 2020.11.28 |
Ruby on Rails 전문가가 Scaffolding을 사용하지 않는 이유는 무엇입니까? (0) | 2020.11.28 |