菜鸟教程小白 发表于 2022-12-13 14:05:20

ios - 右侧图像的按钮从右侧对齐 x 点


                                            <p><p>我正在尝试创建一个如下所示的按钮:</p>

<p> <a href="/image/ZO9Nj.png" rel="noreferrer noopener nofollow"><img src="/image/ZO9Nj.png" alt="enter image description here"/></a> </p>

<p>所以它有一个边框和一个右 ImageView 。</p>

<p>我这样子类化 UIButton:</p>

<pre><code>class ButtonWithRightImage: UIButton {

    override func imageRectForContentRect(contentRect:CGRect) -&gt; CGRect {
      var imageFrame = super.imageRectForContentRect(contentRect)
      imageFrame.origin.x = CGRectGetMaxX(super.titleRectForContentRect(contentRect)) - CGRectGetWidth(imageFrame)
      return imageFrame
    }

    override func titleRectForContentRect(contentRect:CGRect) -&gt; CGRect {
      var titleFrame = super.titleRectForContentRect(contentRect)
      if (self.currentImage != nil) {
            titleFrame.origin.x = CGRectGetMinX(super.imageRectForContentRect(contentRect))
      }
      return titleFrame
    }
}
</code></pre>

<p>我按如下方式创建了我的按钮:</p>

<pre><code>lazy var testButton: ButtonWithRightImage = {
   let button = ButtonWithRightImage(forAutoLayout: ())

    button.setTitle(&#34;Privacy&#34;, forState: .Normal)
    button.setTitleColor(UIColor.DarkBlue(), forState: .Normal)

    button.layer.borderWidth = 1
    button.layer.borderColor = UIColor.grey().CGColor

    button.setImage(UIImage(named: &#34;arrow&#34;), forState: .Normal)

    button.contentHorizontalAlignment = .Left
    button.contentEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0)

    return button
}()
</code></pre>

<p>现在我的按钮看起来像这样:</p>

<p> <a href="/image/hfitj.png" rel="noreferrer noopener nofollow"><img src="/image/hfitj.png" alt="enter image description here"/></a> </p>

<p>如您所见,图像未与右侧 20 点对齐。
我不知道该怎么做。我正在使用自动布局来显示按钮,所以我不能只修改我猜的框架。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>由于您的 ButtonWithRightImage 类需要修改以根据您的要求实现输出。 </p>

<pre><code>class ButtonWithRightImage: UIButton {

    override func imageRectForContentRect(contentRect:CGRect) -&gt; CGRect {
      var imageFrame = super.imageRectForContentRect(contentRect)
      imageFrame.origin.x = CGRectGetWidth(contentRect) - CGRectGetWidth(imageFrame)
      return imageFrame
    }

    override func titleRectForContentRect(contentRect:CGRect) -&gt; CGRect {
      var titleFrame = super.titleRectForContentRect(contentRect)
      if (self.currentImage != nil) {
            titleFrame.origin.x = CGRectGetMinX(super.imageRectForContentRect(contentRect))
      }
      return titleFrame
    }
}
</code></pre>

<p>问题是您需要从 <code>容器宽度</code> 中减去图像宽度。而不是 <code>container maxX</code> 值。</p>

<p>如果您对此有任何意见,请告诉我。</p>

<p>谢谢</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 右侧图像的按钮从右侧对齐 x 点,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/39545159/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/39545159/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 右侧图像的按钮从右侧对齐 x 点