poner para pantalla inicio home flotante descargar desactivar como boton app ios swift storyboard facebook-login facebook-ios-sdk

ios - pantalla - descargar boton de inicio para ipad



No se puede cambiar la altura del botón de inicio de sesión en FBSDKLoginKit? (6)

Como último recurso, intente implementar su propio botón personalizado para actuar como un botón de inicio de sesión de Facebook. Es posible que impidan la personalización del botón desde el SDK. https://developers.facebook.com/docs/swift/login : hay una sección aquí con código de ejemplo: "Botón de inicio de sesión personalizado". No parece complicado.

Estoy usando FBSDKLoginKit en iOS con Swift.

Hasta hace poco, funcionaba perfectamente, pero ahora no puedo anular la altura de mi botón en el guión gráfico.

La altura del botón ahora es mucho más pequeña por alguna razón. Intenté establecer las restricciones de altura para el botón, poner el botón en una vista de pila y configurarlo para que se llene proporcionalmente e incluso anular la altura del botón en el SDK sin tener suerte.

Si cambio el botón a un UIButton normal, las restricciones de diseño funcionan perfectamente.

Así es como se ve el botón cuando ejecuto la aplicación.

Así es como me gustaría que se vea el botón, en cuanto al tamaño.


También me encontré con este problema. El motivo de esto se explica en la guía de actualización 4.18.0 a 4.19.0 :

La FBSDKLoginButton usuario de FBSDKLoginButton ha cambiado en 4.19.0. En lugar de "Iniciar sesión con Facebook", el botón ahora muestra "Continuar con Facebook". El color del botón se cambia a # 4267B2 desde # 3B5998. La altura del botón ahora está fija en 28 debido al uso de un tamaño de letra más pequeño y almohadillas alrededor de un logotipo de Facebook más grande.

La única solución que encontré hasta ahora es degradar la versión del SDK a 4.18.0 (hizo el trabajo por mí).

Es posible que FB aborde este problema (... que han creado para muchas personas) en una de las actualizaciones futuras del SDK.

Hacia una solución más permanente, podemos ver los cambios específicos que causaron esto, en GitHub . El cambio que encuentro más sospechoso comienza en la línea 194 :

[self addConstraint:[NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:28]];

Si se elimina / inhabilita la restricción anterior, podría ayudar a revertir la situación. Debería verse aproximadamente así (no tengo un IDE al momento de escribir):

// Obtain all constraints for the button: let layoutConstraintsArr = fbLoginButton.constraints // Iterate over array and test constraints until we find the correct one: for lc in layoutConstraintsArr { // or attribute is NSLayoutAttributeHeight etc. if ( lc.constant == 28 ){ // Then disable it... lc.active = false break } }

Cuando tenga la oportunidad de probar lo anterior o si encuentro una solución mejor, actualizaré la respuesta.


Tuvimos el mismo problema. initWithFrame este problema creando el botón en el código con el método initWithFrame .

de la documentación

FBSDKLoginButton tiene una altura fija de @c 30 píxeles, pero puede cambiar el ancho. initWithFrame:CGRectZero ajustará el tamaño del botón a su fotograma mínimo.

esta solución nos funciona

let facebookButton = FBSDKLoginButton(frame:facebookButtonPlaceholder.bounds) facebookButton.readPermissions = ["email"] facebookButton.backgroundColor = UIColor.clear facebookButtonPlaceholder.addSubview(facebookButton) facebookButtonPlaceholder.backgroundColor = UIColor.clear


Por ahora, el botón de Facebook tiene solo una restricción, que es la restricción de altura, y puedes eliminar todas las restricciones del botón y agregar las tuyas.

facebookSignInButton.removeConstraints(facebookSignInButton.constraints)

Pero, por supuesto, esto puede cambiar en el futuro y es posible que elimine una restricción que no desea. Quizás una mejor solución sería si eliminas solo esa restricción problemática.

if let facebookButtonHeightConstraint = facebookSignInButton.constraints.first(where: { $0.firstAttribute == .height }) { facebookSignInButton.removeConstraint(facebookButtonHeightConstraint) }


Así que tomé la solución de Dev-iL y la puse en algo un poco más a prueba de futuro. Soy muy nuevo en esto, así que me tomó algunas horas averiguarlo, pero pensé que lo compartiría, ya que desactiva específicamente la restricción de altura en función de ser una restricción de altura en lugar de basarse en el valor constante.

He usado una subvista clasificada como el botón de Facebook en mi guión gráfico y he establecido la nueva restricción allí.

Prefiero este método y siento que es un enfoque más limpio.

Nota: Creo que para una restricción de altura siempre será el primer valor; sin embargo, corrígeme si me equivoco y actualizaré con una edición. Como mencioné, soy nuevo en esto

Editar: decidí incluir el valor constante de 28 para permitir que se omita la restricción de altura de mi storyboard durante la eliminación. Esto no es necesario si agrega la restricción programáticamente después de la eliminación

for const in fbLoginButton.constraints{ if const.firstAttribute == NSLayoutAttribute.height && const.constant == 28{ fbLoginButton.removeConstraint(const) } }


Puede convenientemente lograr esto con una simple anulación del botón de Facebook.

Rápido:

class FacebookButton: FBSDKLoginButton { override func updateConstraints() { // deactivate height constraints added by the facebook sdk (we''ll force our own instrinsic height) for contraint in constraints { if contraint.firstAttribute == .height, contraint.constant < standardButtonHeight { // deactivate this constraint contraint.isActive = false } } super.updateConstraints() } override var intrinsicContentSize: CGSize { return CGSize(width: UIViewNoIntrinsicMetric, height: standardButtonHeight) } override func imageRect(forContentRect contentRect: CGRect) -> CGRect { let logoSize: CGFloat = 24.0 let centerY = contentRect.midY let y: CGFloat = centerY - (logoSize / 2.0) return CGRect(x: y, y: y, width: logoSize, height: logoSize) } override func titleRect(forContentRect contentRect: CGRect) -> CGRect { if isHidden || bounds.isEmpty { return .zero } let imageRect = self.imageRect(forContentRect: contentRect) let titleX = imageRect.maxX let titleRect = CGRect(x: titleX, y: 0, width: contentRect.width - titleX - titleX, height: contentRect.height) return titleRect } }

En este ejemplo de código, standardButtonHeight es una constante definida con la altura del botón deseada.

También tenga en cuenta que el tamaño del logotipo de 24.0 es el mismo tamaño utilizado en la versión 4.18 del SDK.