Ios 在情节提要中显示UIBarButton的图像而不是文本

Ios 在情节提要中显示UIBarButton的图像而不是文本,ios,swift,uibarbuttonitem,Ios,Swift,Uibarbuttonitem,我正在创建一个带有导航栏的ViewController。在此栏中,我添加了一个UIBarButton,我将在其上附加一个segue以转到另一个ViewController。 我希望这个按钮是一个图像,而不是简单的文本,因此我尝试进入属性检查器部分,并为我的按钮添加一个图像。结果很糟糕: 正如你现在所想的,我希望有一个正确的图像(像一个稍微小一点的,我的在xcsets下,25像素的高度和宽度) 通过使用以下内容,我成功地通过编程实现了更好的功能: hpSettingsBtn.image = UI

我正在创建一个带有导航栏的ViewController。在此栏中,我添加了一个UIBarButton,我将在其上附加一个segue以转到另一个ViewController。 我希望这个按钮是一个图像,而不是简单的文本,因此我尝试进入属性检查器部分,并为我的按钮添加一个图像。结果很糟糕:

正如你现在所想的,我希望有一个正确的图像(像一个稍微小一点的,我的在xcsets下,25像素的高度和宽度)

通过使用以下内容,我成功地通过编程实现了更好的功能:

hpSettingsBtn.image = UIImage(named: "settings")
但仍然不是我想要的

有什么想法吗

我还尝试使用一个函数来使用自定义视图,但是我的按钮不再是可点击的

class HomePageViewController: UIViewController {
    @IBOutlet weak var hpSettingsBtn: UIBarButtonItem!

    override func viewDidLoad() {
        super.viewDidLoad()
        let button = createSettingsBtn()
        hpSettingsBtn.customView = button
    }

    func createSettingsBtn() -> UIButton {
        //create a new button
        let button = UIButton(type: .custom)
        //set image for button
        button.setImage(UIImage(named: "settings"), for: .normal)
        //set frame
        button.frame = CGRect(x: 0, y: 0, width: 25, height: 25)

        button.widthAnchor.constraint(equalToConstant: 25).isActive = true
        button.heightAnchor.constraint(equalToConstant: 25).isActive = true

        return button
    }

如果我使用这个代码,没有UIBarButton(通过在我的代码中创建它并将它附加到导航栏上),那么我不知道是否可以使用segue with(因为按钮没有出现在情节提要上).

您可以通过转到序列图像板中的“标尺外观”选项卡来更改条形图项目在序列图像板中插入的图像,如图所示。我希望这对您有所帮助

您可以通过转到序列图像板中的“标尺外观”选项卡来更改序列图像板中插入的条形项目的图像,如图所示。我希望这有助于首先创建从第一个viewController到第二个viewController的序列,并为该序列设置标识符

eg : segue1 //segue identifier
然后创建自定义按钮

func makeSettingsBtn() {
    //create a new button
    let button = UIButton(type: .custom)
    //set image for button
    button.setImage(UIImage(named: "settings"), for: .normal)
    //set frame
    button.frame = CGRect(x: 0, y: 0, width: 25, height: 25)

    button.widthAnchor.constraint(equalToConstant: 25).isActive = true
    button.heightAnchor.constraint(equalToConstant: 25).isActive = true

    //Add target
    button.addTarget(self, action: #selector(self.btnClick(_:)), for: .touchUpInside)

    let barButton = UIBarButtonItem(customView: button)
    self.navigationItem.rightBarButtonItem = barButton
}
按钮动作法

@objc func btnClick(_ sender:UIButton) {
    self.performSegueWithIdentifier("segue1", sender: self)
}

首先创建从第一个viewController到第二个viewController的序列,并为该序列设置标识符

eg : segue1 //segue identifier
然后创建自定义按钮

func makeSettingsBtn() {
    //create a new button
    let button = UIButton(type: .custom)
    //set image for button
    button.setImage(UIImage(named: "settings"), for: .normal)
    //set frame
    button.frame = CGRect(x: 0, y: 0, width: 25, height: 25)

    button.widthAnchor.constraint(equalToConstant: 25).isActive = true
    button.heightAnchor.constraint(equalToConstant: 25).isActive = true

    //Add target
    button.addTarget(self, action: #selector(self.btnClick(_:)), for: .touchUpInside)

    let barButton = UIBarButtonItem(customView: button)
    self.navigationItem.rightBarButtonItem = barButton
}
按钮动作法

@objc func btnClick(_ sender:UIButton) {
    self.performSegueWithIdentifier("segue1", sender: self)
}

我会在它的父控制器中为按钮制作一个插座。当该控制器加载时,您可以调用self.button.setImage(:,:),我将在其父控制器中为该按钮创建一个出口。当该控制器加载时,您可以调用self.button.setImage(:,:)谢谢,即使我仍然不明白为什么不能通过故事板使用该图像,这正是我想要的。出现问题的原因是,从ios 11开始,UIBarButtonim使用自动布局,而不是处理帧。这就是为什么如果使用Xcode 9,应该为该图像按钮添加宽度约束。(这是widthAnchor和heightAnchor)谢谢,即使我仍然不明白为什么我不能在故事板中使用图像,这是我想要的。出现问题的原因是ios 11的UIBarButtonim使用自动布局,而不是处理帧。这就是为什么如果使用Xcode 9,应该为该图像按钮添加宽度约束。(那是widthAnchor和heightAnchor)我试过了,但没有什么好结果。我只是看到我的图像被放大甚至消失了。嗯,这很奇怪。您为哪些输入填写了哪些值?我尝试了不同的输入,主要使用左和右(当然),使用0到20之间的值,然后使用50-100-200进行测试。。。我把我的图像放在一个占据很大位置的“虚拟”(我猜)矩形的中心,我无法缩短它(我的图像不包含这个矩形)。我尝试了这个,但没有任何效果。我只是看到我的图像被放大甚至消失了。嗯,这很奇怪。您为哪些输入填写了哪些值?我尝试了不同的输入,主要使用左和右(当然),使用0到20之间的值,然后使用50-100-200进行测试。。。我的图像位于一个占据很大位置的“虚拟”(我猜)矩形的中心,我无法缩短它(我的图像不包含这个矩形)。