Ios 在情节提要中显示UIBarButton的图像而不是文本
我正在创建一个带有导航栏的ViewController。在此栏中,我添加了一个UIBarButton,我将在其上附加一个segue以转到另一个ViewController。 我希望这个按钮是一个图像,而不是简单的文本,因此我尝试进入属性检查器部分,并为我的按钮添加一个图像。结果很糟糕: 正如你现在所想的,我希望有一个正确的图像(像一个稍微小一点的,我的在xcsets下,25像素的高度和宽度) 通过使用以下内容,我成功地通过编程实现了更好的功能:Ios 在情节提要中显示UIBarButton的图像而不是文本,ios,swift,uibarbuttonitem,Ios,Swift,Uibarbuttonitem,我正在创建一个带有导航栏的ViewController。在此栏中,我添加了一个UIBarButton,我将在其上附加一个segue以转到另一个ViewController。 我希望这个按钮是一个图像,而不是简单的文本,因此我尝试进入属性检查器部分,并为我的按钮添加一个图像。结果很糟糕: 正如你现在所想的,我希望有一个正确的图像(像一个稍微小一点的,我的在xcsets下,25像素的高度和宽度) 通过使用以下内容,我成功地通过编程实现了更好的功能: hpSettingsBtn.image = UI
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进行测试。。。我的图像位于一个占据很大位置的“虚拟”(我猜)矩形的中心,我无法缩短它(我的图像不包含这个矩形)。