আইপ্যাডে সেটিংস অ্যাপের মতো আইওএস 7 টেবিলভিউ


100

আমি শৈলী আইপ্যাড সেটিংস অ্যাপ্লিকেশানের মত একই সাথে একটি গোষ্ঠী UITableView করতে চান বিস্তারিত ভিউ জন্য আইওএস 7

এটি গোলাকার কোণার একটি টেবিলভিউ। বিশদ জন্য সংযুক্তি পরীক্ষা করুন।

এটির মতো দেখতে কিছু ডিফল্ট সেটিংস কি এটির জন্য আমাদের কিছু কাস্টম অঙ্কন করা দরকার।

সঠিক দিকের কোনও ইঙ্গিত প্রশংসা করা হবে।

ধন্যবাদ

এখানে চিত্র বর্ণনা লিখুন

উত্তর:


198

আমি সেটিংস অ্যাপ্লিকেশনটিতে ঘর শৈলীর আরও ভাল সিমুলেশন পেতে উইল ডিসপ্লেকেলকে আরও এগিয়ে গিয়েছি এবং আরও কাস্টমাইজ করেছি।

উদ্দেশ্য গ

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([cell respondsToSelector:@selector(tintColor)]) {
        if (tableView == self.tableView) {
            CGFloat cornerRadius = 5.f;
            cell.backgroundColor = UIColor.clearColor;
            CAShapeLayer *layer = [[CAShapeLayer alloc] init];
            CGMutablePathRef pathRef = CGPathCreateMutable();
            CGRect bounds = CGRectInset(cell.bounds, 10, 0);
            BOOL addLine = NO;
            if (indexPath.row == 0 && indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1) {
                CGPathAddRoundedRect(pathRef, nil, bounds, cornerRadius, cornerRadius);
            } else if (indexPath.row == 0) {
                CGPathMoveToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds));
                CGPathAddArcToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMinY(bounds), CGRectGetMidX(bounds), CGRectGetMinY(bounds), cornerRadius);
                CGPathAddArcToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMinY(bounds), CGRectGetMaxX(bounds), CGRectGetMidY(bounds), cornerRadius);
                CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds));
                addLine = YES;
            } else if (indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1) {
                CGPathMoveToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMinY(bounds));
                CGPathAddArcToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds), CGRectGetMidX(bounds), CGRectGetMaxY(bounds), cornerRadius);
                CGPathAddArcToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds), CGRectGetMaxX(bounds), CGRectGetMidY(bounds), cornerRadius);
                CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMinY(bounds));
            } else {
                CGPathAddRect(pathRef, nil, bounds);
                addLine = YES;
            }
            layer.path = pathRef;
            CFRelease(pathRef);
            layer.fillColor = [UIColor colorWithWhite:1.f alpha:0.8f].CGColor;

            if (addLine == YES) {
                CALayer *lineLayer = [[CALayer alloc] init];
                CGFloat lineHeight = (1.f / [UIScreen mainScreen].scale);
                lineLayer.frame = CGRectMake(CGRectGetMinX(bounds)+10, bounds.size.height-lineHeight, bounds.size.width-10, lineHeight);
                lineLayer.backgroundColor = tableView.separatorColor.CGColor;
                [layer addSublayer:lineLayer];
            }
            UIView *testView = [[UIView alloc] initWithFrame:bounds];
            [testView.layer insertSublayer:layer atIndex:0];
            testView.backgroundColor = UIColor.clearColor;
            cell.backgroundView = testView;
        }
    }
}

সুইফট

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    if (cell.respondsToSelector(Selector("tintColor"))){
        if (tableView == self.tableView) {
            let cornerRadius : CGFloat = 12.0
            cell.backgroundColor = UIColor.clearColor()
            var layer: CAShapeLayer = CAShapeLayer()
            var pathRef:CGMutablePathRef = CGPathCreateMutable()
            var bounds: CGRect = CGRectInset(cell.bounds, 25, 0)
            var addLine: Bool = false

            if (indexPath.row == 0 && indexPath.row == tableView.numberOfRowsInSection(indexPath.section)-1) {
                CGPathAddRoundedRect(pathRef, nil, bounds, cornerRadius, cornerRadius)
            } else if (indexPath.row == 0) {
                CGPathMoveToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds))
                CGPathAddArcToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMinY(bounds), CGRectGetMidX(bounds), CGRectGetMinY(bounds), cornerRadius)
                CGPathAddArcToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMinY(bounds), CGRectGetMaxX(bounds), CGRectGetMidY(bounds), cornerRadius)
                CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds))
                addLine = true
            } else if (indexPath.row == tableView.numberOfRowsInSection(indexPath.section)-1) {
                CGPathMoveToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMinY(bounds))
                CGPathAddArcToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds), CGRectGetMidX(bounds), CGRectGetMaxY(bounds), cornerRadius)
                CGPathAddArcToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds), CGRectGetMaxX(bounds), CGRectGetMidY(bounds), cornerRadius)
                CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMinY(bounds))
            } else {
                CGPathAddRect(pathRef, nil, bounds)
                addLine = true
            }

            layer.path = pathRef
            layer.fillColor = UIColor(red: 255/255.0, green: 255/255.0, blue: 255/255.0, alpha: 0.8).CGColor

            if (addLine == true) {
                var lineLayer: CALayer = CALayer()
                var lineHeight: CGFloat = (1.0 / UIScreen.mainScreen().scale)
                lineLayer.frame = CGRectMake(CGRectGetMinX(bounds)+10, bounds.size.height-lineHeight, bounds.size.width-10, lineHeight)
                lineLayer.backgroundColor = tableView.separatorColor.CGColor
                layer.addSublayer(lineLayer)
            }
            var testView: UIView = UIView(frame: bounds)
            testView.layer.insertSublayer(layer, atIndex: 0)
            testView.backgroundColor = UIColor.clearColor()
            cell.backgroundView = testView
        }
    }
}

সুইফট 3

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    let cornerRadius: CGFloat = 5
    cell.backgroundColor = .clear

    let layer = CAShapeLayer()
    let pathRef = CGMutablePath()
    let bounds = cell.bounds.insetBy(dx: 20, dy: 0)
    var addLine = false

    if indexPath.row == 0 && indexPath.row == tableView.numberOfRows(inSection: indexPath.section) - 1 {
        pathRef.__addRoundedRect(transform: nil, rect: bounds, cornerWidth: cornerRadius, cornerHeight: cornerRadius)
    } else if indexPath.row == 0 {
        pathRef.move(to: .init(x: bounds.minX, y: bounds.maxY))
        pathRef.addArc(tangent1End: .init(x: bounds.minX, y: bounds.minY), tangent2End: .init(x: bounds.midX, y: bounds.minY), radius: cornerRadius)
        pathRef.addArc(tangent1End: .init(x: bounds.maxX, y: bounds.minY), tangent2End: .init(x: bounds.maxX, y: bounds.midY), radius: cornerRadius)
        pathRef.addLine(to: .init(x: bounds.maxX, y: bounds.maxY))
        addLine = true
    } else if indexPath.row == tableView.numberOfRows(inSection: indexPath.section) - 1 {
        pathRef.move(to: .init(x: bounds.minX, y: bounds.minY))
        pathRef.addArc(tangent1End: .init(x: bounds.minX, y: bounds.maxY), tangent2End: .init(x: bounds.midX, y: bounds.maxY), radius: cornerRadius)
        pathRef.addArc(tangent1End: .init(x: bounds.maxX, y: bounds.maxY), tangent2End: .init(x: bounds.maxX, y: bounds.midY), radius: cornerRadius)
        pathRef.addLine(to: .init(x: bounds.maxX, y: bounds.minY))
    } else {
        pathRef.addRect(bounds)
        addLine = true
    }

    layer.path = pathRef
    layer.fillColor = UIColor(white: 1, alpha: 0.8).cgColor

    if (addLine == true) {
        let lineLayer = CALayer()
        let lineHeight = 1.0 / UIScreen.main.scale
        lineLayer.frame = CGRect(x: bounds.minX + 10, y: bounds.size.height - lineHeight, width: bounds.size.width - 10, height: lineHeight)
        lineLayer.backgroundColor = tableView.separatorColor?.cgColor
        layer.addSublayer(lineLayer)
    }

    let testView = UIView(frame: bounds)
    testView.layer.insertSublayer(layer, at: 0)
    testView.backgroundColor = .clear
    cell.backgroundView = testView
}

সুইফট 4.2

override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {

    if (cell.responds(to: #selector(getter: UIView.tintColor))){
        if tableView == self.tableView {
            let cornerRadius: CGFloat = 12.0
            cell.backgroundColor = .clear
            let layer: CAShapeLayer = CAShapeLayer()
            let path: CGMutablePath = CGMutablePath()
            let bounds: CGRect = cell.bounds
            bounds.insetBy(dx: 25.0, dy: 0.0)
            var addLine: Bool = false

            if indexPath.row == 0 && indexPath.row == ( tableView.numberOfRows(inSection: indexPath.section) - 1) {
                path.addRoundedRect(in: bounds, cornerWidth: cornerRadius, cornerHeight: cornerRadius)

            } else if indexPath.row == 0 {
                path.move(to: CGPoint(x: bounds.minX, y: bounds.maxY))
                path.addArc(tangent1End: CGPoint(x: bounds.minX, y: bounds.minY), tangent2End: CGPoint(x: bounds.midX, y: bounds.minY), radius: cornerRadius)
                path.addArc(tangent1End: CGPoint(x: bounds.maxX, y: bounds.minY), tangent2End: CGPoint(x: bounds.maxX, y: bounds.midY), radius: cornerRadius)
                path.addLine(to: CGPoint(x: bounds.maxX, y: bounds.maxY))

            } else if indexPath.row == (tableView.numberOfRows(inSection: indexPath.section) - 1) {
                path.move(to: CGPoint(x: bounds.minX, y: bounds.minY))
                path.addArc(tangent1End: CGPoint(x: bounds.minX, y: bounds.maxY), tangent2End: CGPoint(x: bounds.midX, y: bounds.maxY), radius: cornerRadius)
                path.addArc(tangent1End: CGPoint(x: bounds.maxX, y: bounds.maxY), tangent2End: CGPoint(x: bounds.maxX, y: bounds.midY), radius: cornerRadius)
                path.addLine(to: CGPoint(x: bounds.maxX, y: bounds.minY))

            } else {
                path.addRect(bounds)
                addLine = true
            }

            layer.path = path
            layer.fillColor = UIColor.white.withAlphaComponent(0.8).cgColor

            if addLine {
                let lineLayer: CALayer = CALayer()
                let lineHeight: CGFloat = 1.0 / UIScreen.main.scale
                lineLayer.frame = CGRect(x: bounds.minX + 10.0, y: bounds.size.height - lineHeight, width: bounds.size.width, height: lineHeight)
                lineLayer.backgroundColor = tableView.separatorColor?.cgColor
                layer.addSublayer(lineLayer)
            }

            let testView: UIView = UIView(frame: bounds)
            testView.layer.insertSublayer(layer, at: 0)
            testView.backgroundColor = .clear
            cell.backgroundView = testView
        }
    }
}

আইওএস 7-তে উদাহরণ


4
এটি এমন দুর্দান্ত উত্তর। আমি এখনও লুকাতে শীর্ষ এবং নীচের লাইন পেতে পারি না। কোন ধারণা? অন্য সব কিছুই নিখুঁতভাবে কাজ করে!
হিশামাউস

5
এটা কাজ করে। পুরো টেবিল ভিউয়ের বিভাজক শৈলীর কোনওটিতে সেট করা কৌশলটি কার্যকর করে না। চিয়ার্স
হিশামৌস

4
কোডটি সরল করতে [UIBezierPath bezierPathWithRoundedRect:bounds byRoundingCorners:corner cornerRadii:cornerSize];
আপনিও

4
@ জাভানমেট্রে ভাল উত্তর, আপনাকে উজ্জীবিত করেছে। এটি প্রকাশ আইকনটির জন্য কোনও সমস্যার কারণ বলে মনে হচ্ছে। আমার প্রকাশ আইকনটি ঘরের বাইরে যায়। আপনি দয়া করে সহায়তা করতে পারেন
গণেশ সোমানী

4
কীভাবে স্তরটির অটোরিসাইজিং সেট করবেন, সুতরাং ঘোরানোর পরে, এটি ফ্রেমটি এটির সুপারভাইজের মতো পরিবর্তন করতে পারে?
zgjie

16

আইওএস 13 এবং তারপরে , এই টেবিল শৈলীটি শেষ পর্যন্ত অ্যাপল দ্বারা নতুন ইউআইটিবেল ভিউ.সাইটি.আইনসেটগ্রুপযুক্ত টেবিল ভিউ শৈলীর সাথে এটি পুনরায় ইঞ্জিনিয়ার না করেই উপলব্ধ করে তুলেছে

এক্সকোড ১১ এবং তারপরে, স্টাইলের জন্য ইনসেট গ্রুপিং নির্বাচন করে টেবিল ভিউয়ের জন্য ইন্টারফেস বিল্ডার সেটিংসে এটি সেট করা যেতে পারে:

ইন্টারফেস নির্মাতা টেবিল দেখুন সেটিংস


4
এই সম্পত্তিটি কীভাবে সুইফ্টইউআই-তে তালিকার জন্য সেট করবেন?
Sorin Lica

4
.listStyle (গ্রুপযুক্ত তালিকা স্টাইল ()) @ সোরিনলিকা
দিগ্বিজয় গিদা

5

@ নরসিমহাইয়া কল্লির উত্তর, আমি কীভাবে ঘরের ব্যাকগ্রাউন্ড ভিউ সেট করেছিলাম যাতে পুরো ঘরটি হাইলাইট হওয়ার মতো লাগে না। আশাকরি এটা সাহায্য করবে.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    InfoCell *cell;
    ...

    if ([cell respondsToSelector:@selector(tintColor)]) {
        cell.selectedBackgroundView = [self backgroundCellView:cell indexPath:indexPath tableView:tableView];
    }

    return cell;
}

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([cell respondsToSelector:@selector(tintColor)]) {
        cell.backgroundColor = UIColor.clearColor;
        UIColor *cellColor = [UIColor colorWithWhite:0.90f alpha:.95f];
        CAShapeLayer *layer = [self tableView:tableView layerForCell:cell forRowAtIndexPath:indexPath withColor:cellColor];

        CGRect bounds = CGRectInset(cell.bounds, 10, 0);

        UIView *testView = [[UIView alloc] initWithFrame:bounds];
        [testView.layer insertSublayer:layer atIndex:0];
        testView.backgroundColor = UIColor.clearColor;
        cell.backgroundView = testView;
    }
}

- (UIView *)backgroundCellView:(InfoCell *)cell indexPath:(NSIndexPath *)indexPath tableView:(UITableView *)tableView
{
    UIColor *cellColor = [UIColor lightGrayColor];
    CAShapeLayer *layer = [self tableView:tableView layerForCell:cell forRowAtIndexPath:indexPath withColor:cellColor];

    CGRect bounds = CGRectInset(cell.bounds, 10, 0);
    UIView *testView = [[UIView alloc] initWithFrame:bounds];
    [testView.layer insertSublayer:layer atIndex:0];
    return testView;
}

- (CAShapeLayer *)tableView:(UITableView *)tableView layerForCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath withColor:(UIColor *)color
{
    CGFloat cornerRadius = 5.f;
    CAShapeLayer *layer = [[CAShapeLayer alloc] init];
    CGMutablePathRef pathRef = CGPathCreateMutable();
    CGRect bounds = CGRectInset(cell.bounds, 10, 0);
    BOOL addLine = NO;
    if (indexPath.row == 0 && indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1) {
        CGPathAddRoundedRect(pathRef, nil, bounds, cornerRadius, cornerRadius);
    } else if (indexPath.row == 0) {
        CGPathMoveToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds));
        CGPathAddArcToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMinY(bounds), CGRectGetMidX(bounds), CGRectGetMinY(bounds), cornerRadius);
        CGPathAddArcToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMinY(bounds), CGRectGetMaxX(bounds), CGRectGetMidY(bounds), cornerRadius);
        CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds));
        addLine = YES;
    } else if (indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1) {
        CGPathMoveToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMinY(bounds));
        CGPathAddArcToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds), CGRectGetMidX(bounds), CGRectGetMaxY(bounds), cornerRadius);
        CGPathAddArcToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds), CGRectGetMaxX(bounds), CGRectGetMidY(bounds), cornerRadius);
        CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMinY(bounds));
    } else {
        CGPathAddRect(pathRef, nil, bounds);
        addLine = YES;
    }
    layer.path = pathRef;
    CFRelease(pathRef);
    //        layer.fillColor = [UIColor colorWithWhite:1.f alpha:1.0f].CGColor;
    layer.fillColor = color.CGColor;

    if (addLine == YES) {
        CALayer *lineLayer = [[CALayer alloc] init];
        CGFloat lineHeight = (1.f / [UIScreen mainScreen].scale);
        lineLayer.frame = CGRectMake(CGRectGetMinX(bounds)+10, bounds.size.height-lineHeight, bounds.size.width-10, lineHeight);
        lineLayer.backgroundColor = tableView.separatorColor.CGColor;
        [layer addSublayer:lineLayer];
    }

    return layer;
}

সুন্দর ... সুতরাং আপনাকে পটভূমির জন্য অন্য একটি স্তর তৈরি করতে হবে। আমি যদি অন্য কোনও বিজিভিউ তৈরি করি এবং একই স্তরটি পুনরায় ব্যবহার করা না হয় তবে আমি দেখতে পাচ্ছি।
করিম

আপনি ঘরটি নির্বাচন করার পরে ঘরের নীচে একটি সাদা লাইন থাকে।
গ্যাবলার

5

@ জাভানমেটরের উত্তর দুর্দান্ত এবং এটি কার্যকর। এটির শীর্ষে বিল্ডিং এবং মন্তব্যগুলিতে @ সার্জিইসালিউকের পরামর্শ অনুসারে। আমি কোডটি ইউআইবিজেয়ারপথটি ব্যবহার করার পরিবর্তে এটি আরও সহজ এবং সামান্য দ্রুত বোঝার জন্য তৈরি করেছি।

আমার সংস্করণটি বিভাজক বাগটিও ঠিক করে এবং একটি নির্বাচিত ব্যাকগ্রাউন্ড ভিউ যোগ করে যা ঘরের সাথে খাপ খায়।

আপনার টেবিলের দৃশ্যটি কোনও বিভাজনকারীকে সেট করতে ভুলবেন না: tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

উদ্দেশ্য গ

- (void)tableView:(UITableView*)tableView willDisplayCell:(UITableViewCell*)cell forRowAtIndexPath:(NSIndexPath*)indexPath {
  // Set transparent background so we can see the layer
  cell.backgroundColor = UIColor.clearColor;

  // Declare two layers: one for the background and one for the selecetdBackground
  CAShapeLayer *backgroundLayer = [CAShapeLayer layer];
  CAShapeLayer *selectedBackgroundLayer = [[CAShapeLayer alloc] init];

  CGRect bounds = CGRectInset(cell.bounds, 0, 0);//Cell bounds feel free to adjust insets.

  BOOL addSeparator = NO;// Controls if we should add a seperator

  // Determine which corners should be rounded
  if (indexPath.row == 0 && indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1) {
    // This is the only row in its section, round all corners
    backgroundLayer.path = [UIBezierPath bezierPathWithRoundedRect:bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:CGSizeMake(7, 7)].CGPath;

  } else if (indexPath.row == 0) {
    // First row, round the top two corners.
    backgroundLayer.path = [UIBezierPath bezierPathWithRoundedRect:bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(7, 7)].CGPath;
    addSeparator = YES;

  } else if (indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1) {
    // Bottom row, round the bottom two corners.
    backgroundLayer.path = [UIBezierPath bezierPathWithRoundedRect:bounds byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii:CGSizeMake(7, 7)].CGPath;

  } else {
    // Somewhere between the first and last row don't round anything but add a seperator
    backgroundLayer.path = [UIBezierPath bezierPathWithRect:bounds].CGPath;// So we have a background
    addSeparator = YES;
  }

  // Copy the same path for the selected background layer
  selectedBackgroundLayer.path = CGPathCreateCopy(backgroundLayer.path);

  // Yay colors!
  backgroundLayer.fillColor = [UIColor colorWithWhite:1.f alpha:0.8f].CGColor;
  selectedBackgroundLayer.fillColor = [UIColor grayColor].CGColor;

  // Draw seperator if necessary
  if (addSeparator == YES) {
    CALayer *separatorLayer = [CALayer layer];
    CGFloat separatorHeight = (1.f / [UIScreen mainScreen].scale);
    separatorLayer.frame = CGRectMake(CGRectGetMinX(bounds)+10, bounds.size.height-separatorHeight, bounds.size.width-10, separatorHeight);
    separatorLayer.backgroundColor = tableView.separatorColor.CGColor;

    [backgroundLayer addSublayer:separatorLayer];
  }

  // Create a UIView from these layers and set them to the cell's .backgroundView and .selectedBackgroundView
  UIView *backgroundView = [[UIView alloc] initWithFrame:bounds];
  [backgroundView.layer insertSublayer:backgroundLayer atIndex:0];
  backgroundView.backgroundColor = UIColor.clearColor;
  cell.backgroundView = backgroundView;

  UIView *selectedBackgroundView = [[UIView alloc] initWithFrame:bounds];
  [selectedBackgroundView.layer insertSublayer:selectedBackgroundLayer atIndex:0];
  selectedBackgroundView.backgroundColor = UIColor.clearColor;
  cell.selectedBackgroundView = selectedBackgroundView;

}

4

কিছু প্রশ্নের উত্তর দিয়েছেন এখানে চেষ্টা পর, আমি পুরো বরা যান এবং উপরে একটি সমগ্র উপশ্রেণী বাস্তবায়ন করার সিদ্ধান্ত নিয়েছে UITableViewএবং UITableViewCellআইওএস 7 এ বৃত্তাকার গোষ্ঠীবদ্ধে টেবিল ভিউ শৈলী প্রতিলিপি করা।

https://github.com/TimOliver/TORoundedTableView

TORoundedTableView

এটি একটি খুব জড়িত প্রক্রিয়া হিসাবে শেষ হয়েছিল:

  • আমি উপশ্রেণী ছিল layoutSubviewsমধ্যে UITableViewপ্রতিটি কক্ষে এবং আনুষঙ্গিক দৃশ্য relayout তাই তারা আর প্রান্ত থেকে আরেক প্রান্ত পর্যন্ত ছিল।
  • UITableViewCellউপরের এবং নীচে বিভাজক হেয়ারলাইন দর্শনগুলি সরানোর জন্য আমাকে সাবক্লাস করতে হয়েছিল (তবে বিভাগটির মধ্যে থাকাগুলি আছরিত না করে)।
  • এরপরে আমি একটি কাস্টম UITableViewCellব্যাকগ্রাউন্ড ভিউ তৈরি করেছি যা প্রতিটি বিভাগে প্রথম এবং শেষ কক্ষগুলির জন্য ব্যবহার করতে শীর্ষে এবং নীচে গোলাকার কোণ থাকতে পারে। এই ব্যবহারকারীদের যখন কোনও ঘরের উপর চাপ দেওয়া হয় তখন পটভূমি দর্শনের রঙ পরিবর্তন করার অন্তর্নিহিত আচরণ CALayerএড়াতে হবে UITableView
  • যেহেতু তারা এখন CALayerউদাহরণস্বরূপ সাড়া দেয় না layoutSubviews, তখন ব্যবহারকারীকে যখন ডিভাইসটি ঘুরিয়ে দেয় তখন উপরের এবং নীচের কোষগুলিকে অন্য কোষের মতো একই গতিতে পুনরায় আকার দেওয়া হয়েছিল তা নিশ্চিত করতে আমাকে কিছু কোর অ্যানিমেশন টিঙ্কারিং করতে হয়েছিল।

সব মিলিয়ে এটি করা সম্ভব, তবে যেহেতু এটির জন্য যথেষ্ট চেষ্টা করা প্রয়োজন এবং এটি একটি সামান্য পরিমাণের পারফরম্যান্সের জন্য ব্যয় করে (যেহেতু এটি অ্যাপলের কোডকে সব কিছু পিছনে ফেলার চেষ্টা করে নিয়মিত লড়াই করছে), অ্যাপলকে অনুরোধ করে তাদের সাথে একটি রাডার ফাইল করা ভাল might আনুষ্ঠানিকভাবে যে শৈলী প্রকাশ। ততক্ষণে আমার লাইব্রেরিটি নির্দ্বিধায় ব্যবহার করুন। :)


3

আমি টেবিলভিউসলে একই সেটিংস অ্যাপটি বৃত্তাকার বর্ণনটি অর্জন করার চেষ্টা করছিলাম। আমার উত্তরটি কীভাবে কেবলমাত্র একটি ইউআইভিউর শীর্ষ-বাম এবং শীর্ষ-ডান কোণার জন্য কোণার রেডিয়াস সেট করবেন তার একটি এসও উত্তরের উপর ভিত্তি করে ?

এখানে চিত্র বর্ণনা লিখুন

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    [cell setClipsToBounds:YES];

    // rowsArray has cell titles for current group
    NSArray *rowsArray = [self.sectionsArray objectAtIndex:indexPath.section];

    [[cell textLabel] setText:[rowsArray objectAtIndex:indexPath.row]];

    float cornerSize = 11.0; // change this if necessary

    // round all corners if there is only 1 cell
    if (indexPath.row == 0 && [rowsArray count] == 1) {
        UIBezierPath *maskPath;
        maskPath = [UIBezierPath bezierPathWithRoundedRect:cell.bounds byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight | UIRectCornerBottomLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(cornerSize, cornerSize)];

        CAShapeLayer *mlayer = [[CAShapeLayer alloc] init];
        mlayer.frame = cell.bounds;
        mlayer.path = maskPath.CGPath;
        cell.layer.mask = mlayer;
    }

    // round only top cell and only top-left and top-right corners
    else if (indexPath.row == 0) {
        UIBezierPath *maskPath;
        maskPath = [UIBezierPath bezierPathWithRoundedRect:cell.bounds byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight) cornerRadii:CGSizeMake(cornerSize, cornerSize)];

        CAShapeLayer *mlayer = [[CAShapeLayer alloc] init];
        mlayer.frame = cell.bounds;
        mlayer.path = maskPath.CGPath;
        cell.layer.mask = mlayer;
    }

    // round bottom-most cell of group and only bottom-left and bottom-right corners
    else if (indexPath.row == [rowsArray count] - 1) {
        UIBezierPath *maskPath;
        maskPath = [UIBezierPath bezierPathWithRoundedRect:cell.bounds byRoundingCorners:(UIRectCornerBottomLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(cornerSize, cornerSize)];

        CAShapeLayer *mlayer = [[CAShapeLayer alloc] init];
        mlayer.frame = cell.bounds;
        mlayer.path = maskPath.CGPath;
        cell.layer.mask = mlayer;

    }

}

হাই কোরে, আমি এটি ব্যবহার করেছি এবং এটি আমার মনে যা আছে তা নিয়ে দুর্দান্ত কাজ করেছে। তবে বৃত্তাকার আয়তক্ষেত্রের দিকগুলি স্ক্রিনের প্রান্তগুলির খুব কাছাকাছি is কোষগুলি আরও ছোট করার মতো (পাতলা যেমন আছে)? যেকোন টিপসের জন্য অনেক ধন্যবাদ।
Septronic

3

আমি একটি পদ্ধতি তৈরি করেছি addRoundedCornersWithRadius:(CGFloat)radius ForCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPathযা প্রতিটি বিভাগের শীর্ষে এবং নীচে গোলাকার কোণ তৈরি করবে।

এর maskViewসম্পত্তি ব্যবহার করার সুবিধা UITableViewCellহ'ল আপনি ঘরটি যখন নির্বাচন করেন তখন গোলাকার কোণগুলি এখনও দৃশ্যমান থাকে।

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];
    [cell.textLabel setText:[NSString stringWithFormat:@"Row %d in Section %d", indexPath.row, indexPath.section]];
    [tableView addRoundedCornersWithRadius:12.0f ForCell:cell atIndexPath:indexPath];
    return cell;
}

- (void)addRoundedCornersWithRadius:(CGFloat)radius ForCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
    NSInteger MBRows = [self numberOfRowsInSection:indexPath.section] - 1;
    CAShapeLayer    *MBLayer = [[CAShapeLayer alloc] init];
    CGRect cellBounds = CGRectMake(0, 0, self.bounds.size.width, cell.bounds.size.height);

    BOOL shouldAddSeperator = NO;

    if (indexPath.row == 0 && indexPath.row == MBRows) {
        [MBLayer setPath:[UIBezierPath bezierPathWithRoundedRect:cellBounds cornerRadius:radius].CGPath];
    } else if (indexPath.row == 0) {
        [MBLayer setPath:[UIBezierPath bezierPathWithRoundedRect:cellBounds
                                               byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight)
                                                     cornerRadii:CGSizeMake(radius, radius)].CGPath];
        shouldAddSeperator = YES;
    } else if (indexPath.row == MBRows) {
        [MBLayer setPath:[UIBezierPath bezierPathWithRoundedRect:cellBounds
                                               byRoundingCorners:(UIRectCornerBottomLeft|UIRectCornerBottomRight)
                                                     cornerRadii:CGSizeMake(radius, radius)].CGPath];
    } else {
        [MBLayer setPath:[UIBezierPath bezierPathWithRect:cell.bounds].CGPath];
        shouldAddSeperator = YES;
    }

    [cell setMaskView:[[UIView alloc] initWithFrame:cell.bounds]];
    [cell.maskView.layer insertSublayer:MBLayer atIndex:0];

    if (shouldAddSeperator == YES) {
        CGFloat seperator = (1.0f / [UIScreen mainScreen].scale);
        CALayer *cellSeperator = [[CALayer alloc] init];

        [cellSeperator setFrame:CGRectMake(15.0f, cell.bounds.size.height - seperator, cell.bounds.size.width - 15.0f, seperator)];
        [cellSeperator setBackgroundColor:self.separatorColor.CGColor];
        [cell.layer addSublayer:cellSeperator];
    }

    [cell.maskView.layer setMasksToBounds:YES];
    [cell setClipsToBounds:YES];
}

বৃত্তাকার কোণার সাথে আইওএস 9 গ্রুপযুক্ত ইউআইটিএবলভিউ


আমি আমার কোডটি একটি গিথুব সংগ্রহস্থলে যুক্ত করেছি । এমনকি আমি এর জন্য একটি কোকো পোড বিকাশ করার কথা ভাবছি।
বেরেনশকোট

4
আমি আপনার কোড @ ওয়ানমেট্রে (স্বীকৃত উত্তর) একটির সাথে মিশিয়েছি এবং এটি আমার প্রয়োজনের সাথে পুরোপুরি ফিট করে! মাস্কভিউ ব্যবহারের জন্য +1 যা সুন্দর নির্বাচনের অনুমতি দেয়। অনেক ধন্যবাদ !
আন্থোপাক

ভাল একটা. কেবলমাত্র একটি সমস্যা দেখা দিয়েছে: আমি সেল.বাউন্ডগুলি ব্যবহার করতে পারিনি কারণ এটি ভুল ছিল ... তার পরিবর্তে আমি টেবিলভিউ.বাউন্ডস সাইজ.উইথ এবং উচ্চতারফআউটএন্ডেক্সপথ পদ্ধতি থেকে আমার নিজস্ব সীমানা তৈরি করেছি
মেরেক মান্দুচ

1

আমার উত্তরটি খুব দেরিতে হতে পারে তবে সুইফ্ট সংস্করণ (যে কোনও) এর জন্য এটি অবশ্যই কার্যকর এবং এটি ব্যবহার করা খুব সহজ হবে।

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        if (tableView == self.tableViewMovies) {
            //Top Left Right Corners
            let maskPathTop = UIBezierPath(roundedRect: cell.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 5.0, height: 5.0))
            let shapeLayerTop = CAShapeLayer()
            shapeLayerTop.frame = cell.bounds
            shapeLayerTop.path = maskPathTop.cgPath

            //Bottom Left Right Corners
            let maskPathBottom = UIBezierPath(roundedRect: cell.bounds, byRoundingCorners: [.bottomLeft, .bottomRight], cornerRadii: CGSize(width: 5.0, height: 5.0))
            let shapeLayerBottom = CAShapeLayer()
            shapeLayerBottom.frame = cell.bounds
            shapeLayerBottom.path = maskPathBottom.cgPath

            if (indexPath as NSIndexPath).section == 0 {
                if indexPath.row == 0 {
                    cell.layer.mask = shapeLayerTop
                }else if indexPath.row == 2 {
                    cell.layer.mask = shapeLayerBottom
                }
            }else if (indexPath as NSIndexPath).section == 1 {
                if indexPath.row == 0 {
                    cell.layer.mask = shapeLayerTop
                }else {
                    cell.layer.mask = shapeLayerBottom
                }
            }else if (indexPath as NSIndexPath).section == 2 {
                if indexPath.row == 0 {
                    cell.layer.mask = shapeLayerTop
                }else if indexPath.row == 2 {
                    cell.layer.mask = shapeLayerBottom
                }
            }
        }
    }

PS: আমি সুইফট 3.0 এর জন্য নিম্নলিখিত কোডগুলি ব্যবহার করেছি have


1
 func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)
{
    if (tableView == self.orderDetailsTableView)
    {
        //Top Left Right Corners
        let maskPathTop = UIBezierPath(roundedRect: cell.bounds, byRoundingCorners: [.TopLeft, .TopRight], cornerRadii: CGSize(width: 5.0, height: 5.0))
        let shapeLayerTop = CAShapeLayer()
        shapeLayerTop.frame = cell.bounds
        shapeLayerTop.path = maskPathTop.CGPath

        //Bottom Left Right Corners
        let maskPathBottom = UIBezierPath(roundedRect: cell.bounds, byRoundingCorners: [.BottomLeft, .BottomRight], cornerRadii: CGSize(width: 5.0, height: 5.0))
        let shapeLayerBottom = CAShapeLayer()
        shapeLayerBottom.frame = cell.bounds
        shapeLayerBottom.path = maskPathBottom.CGPath

        //All Corners
        let maskPathAll = UIBezierPath(roundedRect: cell.bounds, byRoundingCorners: [.TopLeft, .TopRight, .BottomRight, .BottomLeft], cornerRadii: CGSize(width: 5.0, height: 5.0))
        let shapeLayerAll = CAShapeLayer()
        shapeLayerAll.frame = cell.bounds
        shapeLayerAll.path = maskPathAll.CGPath

        if (indexPath.row == 0 && indexPath.row == tableView.numberOfRowsInSection(indexPath.section)-1)
        {
            cell.layer.mask = shapeLayerAll
        }
     else if (indexPath.row == 0)
        {
        cell.layer.mask = shapeLayerTop
        }
        else if (indexPath.row == tableView.numberOfRowsInSection(indexPath.section)-1)
        {
            cell.layer.mask = shapeLayerBottom
        }
    }
}

দ্রুতগতির জন্য কার্যকরী কোড ... আসলে আমরা যা করছি তা হ'ল বিভাগে যদি কেবল একটি সারি থাকে তবে আমরা এটি সমস্ত পক্ষেই করি, বিভাগে যদি একাধিক সারি থাকে তবে আমরা এটি প্রথম সারিতে শীর্ষে এবং শেষ সারিতে নীচে করব ... বৈশিষ্ট্যগুলি বটম লেফট, বটমরাইট, টপলাইট, টপরেট টাইপ রেক্ট কোণার হওয়া উচিত (আপনি টাইপ করার সময় এক্সকোড থেকে পরামর্শ ... একই নামের সাথে আরও একটি সম্পত্তি সামগ্রীর কর্নার রয়েছে .. তাই এটি দেখুন)


0

আমি আশঙ্কা করছি এটি করার কোনও সহজ উপায় বলে মনে হয় না। আপনাকে আপনার ইউআইটিএবলভিউসেলগুলি কাস্টমাইজ করতে হবে, এর মতো কিছু কাজ করে:এখানে চিত্র বর্ণনা লিখুন

আপনার টেবিলভিউয়ের স্টাইলটি গোষ্ঠীভুক্ত করুন।

রঙ পরিষ্কার করতে আপনার টেবিলভিউ ব্যাকগ্রাউন্ডের রঙ সেট করুন।

আপনার - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)ঘরের ব্যাকগ্রাউন্ডটি পরিষ্কার করুন এবং ব্যাকগ্রাউন্ড হিসাবে পছন্দসই বৃত্তাকার কোণগুলির সাথে একটি ইউআইভিউ তৈরি করুন। এটার মতো কিছু:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

    if(cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
    }

    [cell setBackgroundColor:[UIColor clearColor]];

    UIView *roundedView = [[UIView alloc] initWithFrame:cell.frame];
    [roundedView setBackgroundColor:[UIColor whiteColor]];
    roundedView.layer.cornerRadius = 10.0;
    [[cell contentView] addSubview:roundedView];


    return cell;
}

আপনার আরও কিছু পলিশ করার দরকার হতে পারে তবে এটি মূল ধারণা।


আপনার কোড দেওয়া, আপনি কীভাবে ঘরের প্রস্থ পরিবর্তন করতে বা টেবিলের পাশ দিয়ে মার্জিন যুক্ত করবেন?
brain56

0

আমি একই অর্জন করতে চেয়েছিলাম তবে প্রতিটি বিভাগের চারদিকে সীমানা রেখে (আইওএস 6-এ লাইন)। যেহেতু প্রস্তাবিত সমাধানগুলিতে আমি কোনও সহজ পরিবর্তন খুঁজে পাইনি আমি নিজেরাই এনেছি। এটি এই বিষয়টিতে @ রবার্তো ফেররাজের দেওয়া উত্তরের একটি পরিবর্তন । আমি একটি কাস্টম ক্লাস তৈরি করেছি যা ইউআইটিএবলভিউসেল থেকে উত্তরাধিকার সূত্রে প্রাপ্ত। এতে আমি উপযুক্ত আকারের (একটি ক্ষেত্রে 15px দিয়ে উভয় দিকে সঙ্কুচিত) একটি ধারক ভিউ যুক্ত করেছি। ক্লাসের চেয়ে আমি এটি করেছি:

- (void)layoutSubviews
{
    [super layoutSubviews];
    
    CGFloat cornerRadius = 10.0f;
    
    self.vContainerView.layer.cornerRadius = cornerRadius;
    self.vContainerView.layer.masksToBounds = YES;
    self.vContainerView.layer.borderWidth = 1.0f;
    
    if (self.top && self.bottom)
    {
        // nothing to do - cell is initialized in prepareForReuse
    }
    else if (self.top)
    {
        // cell is on top - extend height to hide bottom line and corners
        CGRect frame = self.vContainerView.frame;
        frame.size.height += cornerRadius;
        self.vContainerView.frame = frame;
    
        self.vSeparatorLine.hidden = NO;
    }
    else if (self.bottom)
    {
        // cell is on bottom - extend height and shift container view up to hide top line and corners
        CGRect frame = self.vContainerView.frame;
        frame.size.height += cornerRadius;
        frame.origin.y -= cornerRadius;
        self.vContainerView.frame = frame;
    
        self.vSeparatorLine.hidden = YES;
    }
    else
    {
        // cell is in the middle - extend height twice the height of corners and shift container view by the height of corners - therefore hide top and bottom lines and corners.
        CGRect frame = self.vContainerView.frame;
        frame.size.height += (2 * cornerRadius);
        frame.origin.y -= cornerRadius;
        self.vContainerView.frame = frame;
    
        self.vSeparatorLine.hidden = NO;
    }
}

- (void)prepareForReuse
{
    // establish original values when cell is reused
    CGRect frame = self.vBorderView.frame;
    frame.size.height = BORDER_VIEW_HEIGHT;
    frame.origin.y = 0;
    self.vBorderView.frame = frame;
    
    self.vSeparatorLine.hidden = YES;
}

তারপরে আপনার ডেটা উত্সে আপনি এটি করুন:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    
    // only one cell in section - must be rounded on top & bottom
    if (indexPath.row == 0 && indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1)
    {
        cell.top    = YES;
        cell.bottom = YES;
    }
    // first cell - must be rounded on top
    else if (indexPath.row == 0)
    {
        cell.top    = YES;
        cell.bottom = NO;
    }
    // last cell - must be rounded on bottom
    else if (indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1)
    {
        cell.top    = NO;
        cell.bottom = YES;
    }
    else
    {
        cell.top    = NO;
        cell.top    = NO;
    }
    
    return cell;
}

এবং ভয়েলা - আপনি আপনার বিভাগগুলিতে বৃত্তাকার কোণ এবং সীমানা পেয়েছেন।

আশাকরি এটা সাহায্য করবে!

আসল কোডে কিছু ত্রুটি পেয়েছি হিসাবে পিএস কয়েকটি সম্পাদনা করেছে - প্রধানত আমি সমস্ত ক্ষেত্রে সমস্ত মান সেট করি নি যা ঘরের পুনরায় ব্যবহার করা হয়েছিল তখন কিছু চমকপ্রদ ক্ষতির কারণ হয় :)


0

সুইফট 4 ক্ষেত্রে আপনি বিভাগের শিরোনামটিও অন্তর্ভুক্ত করতে চান তারপরে একটি নীচে চেষ্টা করুন

কর্নার লেয়ারউইথকে বৈশ্বিক চলক হিসাবে ঘোষণা করুন

var কোণার লেয়ারউইথ: সিজিফ্লোট = 0.0

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    let cornerRadius: CGFloat = 10
    cell.backgroundColor = .clear

    let layer = CAShapeLayer()
    let pathRef = CGMutablePath()
    let bounds = cell.bounds.insetBy(dx: 0, dy: 0)
    cornerLayerWidth = bounds.width
    var addLine = false



    if indexPath.row == 0 && indexPath.row == tableView.numberOfRows(inSection: indexPath.section) - 1 {
        pathRef.__addRoundedRect(transform: nil, rect: bounds, cornerWidth: cornerRadius, cornerHeight: cornerRadius)
    }
    else if indexPath.row == 0 {


    }
    else if indexPath.row == tableView.numberOfRows(inSection: indexPath.section) - 1 {
        pathRef.move(to: .init(x: bounds.minX, y: bounds.minY))
        pathRef.addArc(tangent1End: .init(x: bounds.minX, y: bounds.maxY), tangent2End: .init(x: bounds.midX, y: bounds.maxY), radius: cornerRadius)
        pathRef.addArc(tangent1End: .init(x: bounds.maxX, y: bounds.maxY), tangent2End: .init(x: bounds.maxX, y: bounds.midY), radius: cornerRadius)
        pathRef.addLine(to: .init(x: bounds.maxX, y: bounds.minY))
    } else {
        pathRef.addRect(bounds)
        addLine = true
    }

    layer.path = pathRef
    layer.fillColor = UIColor(white: 1, alpha: 1).cgColor

    if (addLine == true) {
        let lineLayer = CALayer()
        let lineHeight = 1.0 / UIScreen.main.scale
        lineLayer.frame = CGRect(x: bounds.minX, y: bounds.size.height - lineHeight, width: bounds.size.width , height: lineHeight)
        lineLayer.backgroundColor = tableView.separatorColor?.cgColor
        layer.addSublayer(lineLayer)
    }

    let testView = UIView(frame: bounds)
    testView.layer.insertSublayer(layer, at: 0)
    testView.backgroundColor = .clear
    cell.backgroundView = testView
}

এবং

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let cell = tableView.dequeueReusableCell(withIdentifier: "eMPOIListHeaderViewCell") as! eMPOIListHeaderViewCell

    let cornerRadius: CGFloat = 10

    let layer = CAShapeLayer()
    let pathRef = CGMutablePath()
    let bounds =  CGRect(x: 0, y: 0, width: cornerLayerWidth, height: 50)//cell.bounds.insetBy(dx: 0, dy: 0)

    pathRef.__addRoundedRect(transform: nil, rect: bounds, cornerWidth: cornerRadius, cornerHeight: cornerRadius)

    pathRef.move(to: .init(x: bounds.minX, y: bounds.maxY))
    pathRef.addArc(tangent1End: .init(x: bounds.minX, y: bounds.minY), tangent2End: .init(x: bounds.midX, y: bounds.minY), radius: cornerRadius)
    pathRef.addArc(tangent1End: .init(x: bounds.maxX, y: bounds.minY), tangent2End: .init(x: bounds.maxX, y: bounds.midY), radius: cornerRadius)
    pathRef.addLine(to: .init(x: bounds.maxX, y: bounds.maxY))



    layer.path = pathRef
    layer.fillColor = UIColor(white: 1, alpha: 1).cgColor

         let lineLayer = CALayer()
        let lineHeight = 1.0 / UIScreen.main.scale
        lineLayer.frame = CGRect(x: bounds.minX, y: bounds.size.height - lineHeight, width: bounds.size.width , height: lineHeight)
        lineLayer.backgroundColor = tableView.separatorColor?.cgColor
        layer.addSublayer(lineLayer)

    let testView = UIView(frame: bounds)
    testView.layer.insertSublayer(layer, at: 0)
    testView.backgroundColor = .clear

    cell.backgroundView = testView


    return cell

}

আমার শেষে কাজ করছেন না, কোন নির্দিষ্ট সম্পত্তি মনে রাখা দরকার?
জেসমিট

0

সুইফটে 4.2 এ:

class MyCell: UITableViewCell {

var top = false
var bottom = false

override func layoutSubviews() {
    super.layoutSubviews()

    if top && bottom {
        layer.cornerRadius = 10
        layer.masksToBounds = true
        return
    }

    let shape = CAShapeLayer()
    let rect = CGRect(x: 0, y: 0, width: bounds.width, height: bounds.size.height)
    let corners: UIRectCorner = self.top ? [.topLeft, .topRight] : [.bottomRight, .bottomLeft]

    shape.path = UIBezierPath(roundedRect: rect, byRoundingCorners: corners, cornerRadii: CGSize(width: 10, height: 10)).cgPath
    layer.mask = shape
    layer.masksToBounds = true
  }
}

ব্যবহার করা:

ঘরটি কোনও গোষ্ঠীর প্রথম top = Trueহলে সেট করুন , এটি সর্বনিম্ন সেল হলে সেট করুন , যদি bottom = trueগ্রুপটি কেবলমাত্র উভয় সেট করে থাকে true

আপনি যদি কম বা বেশি বৃত্তাকার চান তবে কেবল রেডিওগুলি 10 থেকে অন্য মানতে পরিবর্তন করুন।


যদি প্রথম এবং শেষ কক্ষে ছায়া এবং কোণার ব্যাসার্ধ প্রয়োগ করতে চান তবে আমি কীভাবে এটি করতে পারি?
হার্ডিকস

-1

এই কোডটি একক ঘরের পরিবর্তে পুরো টেবিল দর্শনের জন্য বৃত্তাকার কোণগুলি সেট করবে।

UIView *roundedView = [[UIView alloc] initWithFrame:CGRectInset(table.frame, 5, 0)];
roundedView.backgroundColor = [UIColor colorWithWhite:1.f alpha:0.8f];
roundedView.layer.cornerRadius = 5.f;
[self.view addSubview:roundedView];
[roundedView release];
[self.view addSubview:table];

এবং সেলফোর্ডে প্রতিটি কক্ষের পটভূমি রঙ সাফ করুন

cell.backgroundColor=[UIColor clearColor];

4
এটি প্রশ্নের উত্তর দেওয়ার জন্য কিছু করে না।
সোমবার

-1

টেবিলভিউতে শীর্ষ রেখাটি অপসারণ করতে এটি যোগ করুন স্বয়ং.ট্যাবলভিউ.সেস্পেটরস্টাইল = ইউআইটিএবলভিউসেলসপেটেরেটর স্টাইলনোন;


এটি একটি মন্তব্য নয় একটি উত্তর নয়।
গাধা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.