如何在情节提要中的按钮上实现这种布局?

How to achieve this layout on buttons in Storyboard?

我已经在 Photoshop 中完成了应用程序设计,目前正在 XCode 中编写应用程序代码。我已经绞尽脑汁好几个小时了,如何以 "nice" 的方式制作下面的设计。我认为有一种简单的方法可以使 UISegmentedControl 如下图所示,但您似乎无法将图像和文本添加到 UISegmentedControl 上的按钮。我尝试了其他几种方法,比如使用标签、图像视图和在这些层上方透明的按钮,但它看起来很老套。我怎样才能用方角和下面的边框实现这种布局?

为了使用 UISegmentedControl 执行此操作,我认为您必须创建自定义 UISegmentedControl class 并以编程方式将自定义视图添加到每个段中。

另一种更好的方法可能是使用带有自定义单元格的 UICollectionView?

正如有人已经提到的那样,解决这个问题的最佳方法(如果您想完全按照您的设计),可能是编写您自己的自定义控件。我之前做过类似的事情,这里是其中的一部分:

- (id)initInsideFrame:(CGRect)frame withSegments:(NSArray*)inputArray
{
    self = [super initWithFrame:frame];

    if (self) {
        [self configureDefaultAppearanceInFrame:frame];
        [self initSegmentsFromArray:inputArray];
        [self selectSegmentAtIndex:0];
    }

    return self;
}


- (void)initSegmentsFromArray:(NSArray*)inputArray isSimpleSwitch:(bool)isSimpleSwitch
{
    [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

    _segmentsNumber = (int)inputArray.count;
    _selectedSegmentIndex = 0;
    _segmentsArray = [[NSMutableArray alloc] init];
    _titlesArray = [[NSMutableArray alloc] initWithArray:inputArray];

    for (int i = 0; i < _segmentsNumber; i++) {
        CustomSegment* segment = [[CustomSegment alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width / _segmentsNumber, self.frame.size.height)];

        segment.center = CGPointMake(self.frame.size.width * (2 * i + 1) / (_segmentsNumber * 2), self.frame.size.height / 2);
        segment.index = i;

        segment.title = [[UILabel alloc] initWithFrame:segment.frame];
        segment.title.center = CGPointMake(segment.frame.size.width / 2, segment.frame.size.height / 2);
        segment.title.textAlignment = NSTextAlignmentCenter;
        [segment addSubview:segment.title];

        [segment addTapGestureRecognition];
        segment.delegate = self;

        [self addSubview:segment];
        [_segmentsArray addObject:segment];
    }

    [self refreshInterface];
}

CustomSegment class 只是一个带有手势识别器的 UIView,以及一个允许识别点击段的委托。在你的情况下,你可以在里面放一些额外的图形和标签。

可悲的现实是,如果您想要一些漂亮的自定义界面,您可能不得不自己编写。